单一职责原则

Posted chao-zjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单一职责原则相关的知识,希望对你有一定的参考价值。

单一职责原则

1.基本介绍

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

2.应用实例

以交通工具案例说明
1) 方案1

public class SingleResponsibility1
    public static void main(String[] args)
      Vehicle vehicle = new Vehicle();
      vehilcle.run("摩托车");
      vehicel.run("汽车");
      vehicel.run("飞机");
    


class Vehicle
    public void run(String vehicle)
        System.out.println(vehicle+"在公路上行驶...")
    

缺点:违反了单一职责原则
改进:根据交通工具运行方法不同,分解成不同的类。

2)方案二

public class SingleResponsibility2
  public static void main(String[] args)
      RoadVehicle roadVehicle = new RoadVehicle();
      roadVehicle.run("摩托车");
      roadVehicle.run("汽车");

      AirVehicle airVehicle = new Airvehicle();
      airVehicle.run("飞机");
  


class RoadVehicle
    public void run(String vehicle)
        System.out.println(vehicle+"公路上运行");
    


class AirVehicle
    public void run(String vehicle)
        System.out.println(vehicle+"天空运行");
    

分析:虽然遵守了单一职责原则。但改动很大
改进:直接修改Vehicle类,让方法实现单一原则。

3)方案三

public class SingleResponsibility3
  public static void main(String[] args)
      Vehicle2 vehicle2 = new Vehicle2();
      vehicle2.run("汽车");
      vehicle2.runWater("轮船");
      vehicle2.runAir("飞机");
  

class Vehicle2
    public void run(String vehicle)
        System.out.println(vehicle+"在公路上运行");
    
    public void runAir(String vehicle)
        System.out.println(vehicle+"在天空上运行"):
    

分析:这种修改方法没有对原来的类做大的修改,只是增加方法。
虽然没有在类级别上遵守单一职责原则,但是在方法级别上遵守单一职责。

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

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

以上是关于单一职责原则的主要内容,如果未能解决你的问题,请参考以下文章

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

面向对象五大原则-----单一职责原则

软件设计原则之 单一职责

面向对象编程的六大原则--单一职责原则

七大设计原则之单一职责原则应用

手撸golang 架构设计原则 单一职责原则