解释
代码演示
demo1
public class SingleResponsibility { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("摩托车"); vehicle.run("汽车"); vehicle.run("飞机"); } } /** * 方式1 * 这些写的问题: * 在方式1中,违反了单一原则 * 解决方式: * 根据交通工具运行方法不同,分解成不同的类即可。 */ class Vehicle { public void run(String vehicle){ System.out.println(vehicle + " 在公路上运行..."); } }
demo2
public class SingleResponsibility2 { public static void main(String[] args) { RoadVehicle roadVehicle = new RoadVehicle(); roadVehicle.run("摩托车"); AirVehicle airVehicle = new AirVehicle(); airVehicle.run("飞机"); WaterVehicle waterVehicle = new WaterVehicle(); waterVehicle.run("船"); } } /** * 方案2:的分析 * //1.遵守单一职责原则 * //2.但是这样的改动很大,即将类分解,同时修改客户端 * //3.直接修改vehicle类,改动的代码比较少 = > 方案三 */ 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 + "在水上运行"); } }
demo3
public class SingleResponsibility3 { public static void main(String[] args) { Vehicle2 vehicle2 = new Vehicle2(); vehicle2.run("汽车"); vehicle2.runAir("飞机"); vehicle2.runWater("轮船"); } } /** * 方案三: * 1.这种修改方法没有对原来的类做大的修改,只是增加方法 * 2. 这里虽然没有在类上没有遵守单一职责原则,但是在方法上,仍然遵守单一职责原则 */ class Vehicle2 { public void run(String vehicle){ System.out.println(vehicle + " 在公路上运行..."); } public void runAir(String vehicle){ System.out.println(vehicle + " 在天空运行..."); } public void runWater(String vehicle){ System.out.println(vehicle + " 在水中运行..."); } }
总结
完