单一职责原则

对一个类来说,就是一个类应该只负责一项职责
如:类A负责俩个不同职责:职责1,职责2
当职责1需求变更而改变A的时候,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2

  1. public class SingleResponsibility1 {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. Vehicle vehicle = new Vehicle();
  5. vehicle.run("摩托车");
  6. vehicle.run("汽车");
  7. vehicle.run("飞机");
  8. }
  9. }
  10. // 交通工具类
  11. // 方式1
  12. // 1. 在方式1 的run方法中,违反了单一职责原则
  13. // 2. 解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可
  14. class Vehicle {
  15. public void run(String vehicle) {
  16. System.out.println(vehicle + " 在公路上运行....");
  17. }
  18. }

优化方法第一种:代码改动较大 类单一职责

  1. public class SingleResponsibility2 {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. RoadVehicle roadVehicle = new RoadVehicle();
  5. roadVehicle.run("摩托车");
  6. roadVehicle.run("汽车");
  7. AirVehicle airVehicle = new AirVehicle();
  8. airVehicle.run("飞机");
  9. }
  10. }
  11. //方案2的分析
  12. //1. 遵守单一职责原则
  13. //2. 但是这样做的改动很大,即将类分解,同时修改客户端
  14. //3. 改进:直接修改Vehicle 类,改动的代码会比较少=>方案3
  15. class RoadVehicle {
  16. public void run(String vehicle) {
  17. System.out.println(vehicle + "公路运行");
  18. }
  19. }
  20. class AirVehicle {
  21. public void run(String vehicle) {
  22. System.out.println(vehicle + "天空运行");
  23. }
  24. }
  25. class WaterVehicle {
  26. public void run(String vehicle) {
  27. System.out.println(vehicle + "水中运行");
  28. }
  29. }

优化方法第二种:方法上单一

  1. //方式3的分析
  2. //1. 这种修改方法没有对原来的类做大的修改,只是增加方法
  3. //2. 这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责
  4. class Vehicle2 {
  5. public void run(String vehicle) {
  6. //处理
  7. System.out.println(vehicle + " 在公路上运行....");
  8. }
  9. public void runAir(String vehicle) {
  10. System.out.println(vehicle + " 在天空上运行....");
  11. }
  12. public void runWater(String vehicle) {
  13. System.out.println(vehicle + " 在水中行....");
  14. }
  15. //方法2.
  16. //..
  17. //..
  18. //...
  19. }

总结(单一原则注意事项和细节)

降低类的复杂度,一个类只负责一项职责
提高类的可读性,可维护性
降低变更引起分风险
通常情况下:我们应该遵守单一职责原则,
只有逻辑只够简单明才可以在代码级违反单一职责原则,
只有类中方法数量足够少,可以在方法上保持单一职责原则