package singleresponsbility;public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("摩托车");vehicle.run("汽车");vehicle.run("飞机");}
}class Vehicle{public void run(String vehicle){System.out.println(vehicle + "在公路上跑......");}
}
方式1
1.run方法中,违反了单一职责原则
2.改进: 根据交通工具运行方法不同,分解成不同类即可
package singleresponsbility;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 + "在天空运行......");}
}class WaterVehicle{public void run(String vehicle){System.out.println(vehicle + "在水中运行......");}
}
方式2
1. 遵守了单一职责原则
2.但是这样做的改动很大,即将类分解,同时修改客户端
3.改进:直接修改Vehicle类,改动的代码会比较少
package singleresponsbility;public class SingleResponsibility3 {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();vehicle2.runAir("飞机");vehicle2.runRoad("汽车");vehicle2.runWater("轮船");}
}class Vehicle2{public void runRoad(String vehicle){System.out.println(vehicle + "在公路上运行......");}public void runAir(String vehicle){System.out.println(vehicle + "在天空中运行......");}public void runWater(String vehicle){System.out.println(vehicle + "在水中运行......");}
}
方式3
1.这种修改方法没有对原来的类做大的修改,只是增加方法
2.这里虽然没有在类这个级别上遵守单一 职责原则,但是在方法级别上,仍然是遵守单一职责原则
单一职责原则注意事项和细节
- 降低类的复杂度,一个类只负责一项职责
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类方法数量足够少,可以在方法级别保持单一职责原则