当前位置:   article > 正文

设计模式七大原则:单一职责原则_设计模式单一职责原则

设计模式单一职责原则

设计模式目的

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

打个比方就像盖大厦和小木屋,当功能简单,函数和代码少时,我们能较轻松的直接上手;但如果是像大厦那样,功能复杂,需求可能变化且代码量大时,我们就不能直接上手就来,需要像建筑图纸那样提前规划设计,那设计模式就像软件(程序)的建筑图纸。

设计模式的目的是为了让软件(程序)具有更好的:

代码重用性
相同功能的代码,不用多次编写,降低冗余
可读性
编程规范性, 便于其他程序员的阅读和理解
可扩展性
当需要增加新的功能时,非常的方便,也称为可维护性
可靠性
当我们增加新的功能后,对原来的功能没有影响

  
使程序呈现高内聚,低耦合的特性
模块内部紧密,但模块间依赖小,一者出错不影响他者

面向对象四大好处:可维护、可扩展、可复用、灵活性好。

单一职责原则

单一职责原则(Single responsibility principle),即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,以可能造成职责2执行错误,所需要将类A的粒度分解为A1、A2。

  

单一职责原则注意事项和细节

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

代码示例

        以交通工具的使用为例:

        方案1,违法单一职责原则

  1. public class SingleResponsibility1 {
  2.     public static void main(String[] args) {
  3.         Vehicle vehicle = new Vehicle();
  4.         vehicle.run("汽车");
  5.         vehicle.run("摩托");
  6.         vehicle.run("飞机");
  7.     }
  8. }
  9. //方案1,违法单一职责原则
  10. class Vehicle{
  11.     public  void run(String vehicle){
  12.         System.out.println(vehicle+"在公路上行驶");
  13.     }
  14. }


        方案2,遵守单一职责原则,但是改动很大,要将类分解,且修改客户端

  1. public class SingleResponsibility2 {
  2.     public static void main(String[] args) {
  3.             RoadVehicle roadVehice = new RoadVehicle();
  4.             roadVehice.run("汽车");
  5.             roadVehice.run("摩托");
  6.  
  7.             AirVehicle airVehicle = new AirVehicle();
  8.             airVehicle.run("飞机");
  9.     }
  10. }
  11. //方案2,遵守单一职责原则,但是改动很大,要将类分解,且修改客户端
  12. class RoadVehicle{
  13.     public  void run(String vehicle){
  14.         System.out.println(vehicle+"在公路上行驶");
  15.     }
  16. }
  17. class AirVehicle{
  18.     public  void run(String vehicle){
  19.         System.out.println(vehicle+"在天空上行驶");
  20.     }
  21. }


         方案3,没有对原来类做大的修改,只是增加方法,虽然没有在类这个级别上遵守单一职责原则,但在方法级别上仍然遵守单一职责原则

  1. public class SingleResponsibility3 {
  2.     public static void main(String[] args) {
  3.         Vehicle2 vehicle = new Vehicle2();
  4.         vehicle.run("汽车");
  5.         vehicle.run("摩托");
  6.         vehicle.runAir("飞机");
  7.     }
  8. }
  9. //方案3,没有对原来类对大的修改,只是增加方法
  10. // 虽然没有在类这个级别上遵守单一职责原则,但在方法级别上仍然遵守单一职责原则
  11. class Vehicle2{
  12.     public  void run(String vehicle){
  13.         System.out.println(vehicle+"在公路上行驶");
  14.     }
  15.     public  void runAir(String vehicle){
  16.         System.out.println(vehicle+"在天空上行驶");
  17.     }
  18. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/721217
推荐阅读
相关标签
  

闽ICP备14008679号