单一职责原则
1.基本介绍
一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2
2.应用实例
以交通工具案例说明
- 方案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)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。
网友评论