单一职责原则

单一职责原则

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)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。

posted @ 2019-07-26 00:37  思丿无邪  阅读(249)  评论(0编辑  收藏  举报