原创

设计模式的七大设计原则:其一:单一职责原则

单一职责原则:

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

1.降低类的复杂度,一个类只负责一项职责

2.提高类的可读性,可维护性

3.降低变更引起的风险

4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类方法数量足够少,可以在方法级别保持单一职责原则。

案例:

1.在方式1的run 方法中,违反了单一职责原则,案例中飞机不能在公路上跑,而是在天空中飞行

package singleresponsibility;

public class SingleResponsibility {

    public static void main(String[] args) {
        Vehile vehile = new Vehile();
        vehile.run("小汽车");
        vehile.run("摩托车");
        vehile.run("飞机");
    }

}
//交通工具类
//方式1:
//1.在方式1的run 方法中,违反了单一职责原则
//2.解决方案非常简单,根据交通工具运行方法不同,分解成不同类即可
class Vehile{
    public void run(String vehicle){
        System.err.println(vehicle + " 在公路上跑");
    }
}

2.改进方案:写了三个独立的类,遵守了单一职责原则,但是这样的改动很大,即将类分解,同时修改了客户端

package singleresponsibility;

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类,改动的代码会比较少 ==》 方案3
class RoadVehicle{
    public void run(String vehicle){
        System.err.println( vehicle + " 在公路上运行!");
    }
}

class AirVehicle{
    public void run(String vehicle){
        System.err.println(vehicle + " 在天上飞行");
    }
}

class WaterVehicle{
    public void run(String vehicle){
        System.err.println(vehicle + " 在水里运行");
    }
}

3.再次改进方案:这种改进方案对原始的方案没有大的改动,只是增加了方法,此种方法一定成都上没有遵守单一职责原则,但是在方法级别上遵守了单一职责原则。与单一职责原则中第四条:只有类方法数量足够少,可以在方法级别保持单一职责原则。

package singleresponsibility;

public class SingleResponsibility3 {

    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("汽车");
        vehicle.runAir("飞机");
        vehicle.runWater("轮船");
    }
}
//方式3的分析:
//1.这种修改方式,没有对原来的类做大的修改只是增加了方法
//2.一定程度上没有完全(类上面)遵守单一职责原则,但是在方法级别上遵守了单一职责原则
class Vehicle{
    public void run(String vehicle){
        System.err.println(vehicle +  " 在公路上运行");
    }

    public void runAir(String vehicle){
        System.err.println(vehicle +  " 在天空运行");
    }

    public void runWater(String vehicle){
        System.err.println(vehicle +  " 在水中运行");
    }
}


正文到此结束
本文目录