经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Java设计模式七大原则之单一职责原则详解
来源:jb51  时间:2022/2/9 11:18:17  对本文有异议

定义

单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更。简单来说,就是针对一个java类,它应该只负责一项职责。例如一个Test.java类,它有两个职责:职责1,职责2。当职责1进行修改时,有可能影响到职责2,所以需要将Test.java类拆分成Test1.java和Test2.java两个单一职责的类。

案例

需求

有一个交通工具类,里面定义一个在各种交通工具的方法,创建交通工具的实例,调用方法,方法内执行打印操作

方案一

定义交通工具类Transportation.java

  1. public class Transportation {
  2.  
  3. /**
  4. * 汽车
  5. * @author: liyajie
  6. * @date: 2022/1/28 14:45
  7. * @param car
  8. * @return void
  9. * @exception:
  10. * @update:
  11. * @updatePerson:
  12. **/
  13. public static void car(String car) {
  14. System.out.println(car + "在公路上跑");
  15. }
  16.  
  17. /**
  18. * 火车
  19. * @author: liyajie
  20. * @date: 2022/1/28 14:45
  21. * @param train
  22. * @return void
  23. * @exception:
  24. * @update:
  25. * @updatePerson:
  26. **/
  27. public static void train(String train) {
  28. System.out.println(train + "在铁轨上跑");
  29. }
  30.  
  31. /**
  32. * 飞机
  33. * @author: liyajie
  34. * @date: 2022/1/28 14:45
  35. * @param airplane
  36. * @return void
  37. * @exception:
  38. * @update:
  39. * @updatePerson:
  40. **/
  41. public static void airplane(String airplane) {
  42. System.out.println(airplane + "在天上飞");
  43. }

定义测试类Test1.java

  1. public class Test1 {
  2. public static void main(String[] args) {
  3. Transportation transportation1 = new Transportation();
  4. transportation1.car("汽车");
  5. transportation1.train("火车");
  6. transportation1.airplane("飞机");
  7. }
  8. }

方案二

定义汽车类Car.java

  1. public class Car {
  2.  
  3. /**
  4. * 汽车
  5. * @author: liyajie
  6. * @date: 2022/1/28 14:45
  7. * @param car
  8. * @return void
  9. * @exception:
  10. * @update:
  11. * @updatePerson:
  12. **/
  13. public void car(String car) {
  14. System.out.println(car + "在公路上跑");
  15. }
  16. }

定义火车类Train.java

  1. public class Train {
  2.  
  3. /**
  4. * 火车
  5. * @author: liyajie
  6. * @date: 2022/1/28 14:45
  7. * @param train
  8. * @return void
  9. * @exception:
  10. * @update:
  11. * @updatePerson:
  12. **/
  13. public void train(String train) {
  14. System.out.println(train + "在铁轨上跑");
  15. }
  16. }

定义飞机类Airplane.java

  1. public class Airplane {
  2.  
  3. /**
  4. * 飞机
  5. * @author: liyajie
  6. * @date: 2022/1/28 14:45
  7. * @param airplane
  8. * @return void
  9. * @exception:
  10. * @update:
  11. * @updatePerson:
  12. **/
  13. public void airplane(String airplane) {
  14. System.out.println(airplane + "在天上飞");
  15. }
  16. }

定义测试类Test2.java

  1. public class Test2 {
  2. public static void main(String[] args) {
  3. Car car = new Car();
  4. car.car("汽车");
  5.  
  6. Train train = new Train();
  7. train.train("火车");
  8.  
  9. Airplane airplane = new Airplane();
  10. airplane.airplane("飞机");
  11. }
  12. }

对比分析

方案一,是将汽车,火车,飞机的方法都写在了同一个类里,但是每个交通工具都有自己的方法,做到了方法上的单一职责,如果发生变更,该方案改动较小,但有一定的误操作风险

方案二,是将汽车,火车,飞机分别创建三个类,每个类里只有一种交通工具的方法,做到了类上的单一职责,如果发生变更,该方案改动较大,没有误操作风险

总结

从以上的案例中总结,可以得出:

  • 降低类的复杂度,一个类只负责一项职责 (一个类职责少了,相应的复杂度不就低了嘛)
  • 提高类的可读性以及可维护性 (相应的复杂度降低了,代码量就会减少,可读性也就提高了,可维护性自然也就提高了)
  • 降低变更引起的风险 (一个类职责越多,变更的可能性就会越大,变化带来的风险就会越大)
  • 通常情况下,我们应当遵守类级别单一职责原则 (只有逻辑足够简单,才可以在代码中违反单一职责原则)

如何遵守单一职责原则

从业务出发,从需求出发,识别出同一个类型的职责,进行合理的职责分解。

到此这篇关于Java设计模式七大原则之单一职责原则详解的文章就介绍到这了,更多相关Java单一职责原则内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号