java設計模式學習筆記--單一職責原則

單一職責原則注意事項和細節

1.下降類的複雜度,一個類只負責一項職責
2.提升可讀性,可維護性
3.下降變動引發的風險
4.一般狀況下,咱們應當遵照單一職責原則,只有邏輯足夠簡單,才能夠在代碼級違反單一職責原則,只有類方法數量足夠少,才能夠在方法級別保持單一職責原則

初學者寫法

public class SingleResponsibility01 {
    public static void main(String[] args) {
        Vehicle vehicle =new Vehicle();
        vehicle.run("摩托車");
        vehicle.run("汽車");
        vehicle.run("飛機");
    }
}

//交通工具類
//方式1
//1.在方式1 的run方法中,違反了單一職責原則
//2.解決的方案很是的簡單根據交通工具運行方式的不通,分解成不通類便可

class Vehicle{
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上運行。。。。");
    }
}
複製代碼

遵照單一職責原則1.0寫法

public class SingleResponsibility2 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("摩托車");
        roadVehicle.run("汽車");
        
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飛機");
    }
}

//方案2的分析
//1. 遵照單一職責原則
//2. 可是這樣作的改動很大,即將類分解,同時修改客戶端

class RoadVehicle{
    public void run(String vehicle) {
        System.out.println(vehicle + "在地上運行....");
    }
}

class AirVehicle{
    public void run(String vehicle) {
        System.out.println(vehicle + "在天上運行");
    }
}
複製代碼

遵照單一職責原則2.0寫法

public class SingleRespnsibility3 {
    public static void main(String[] args) {
        Vihicle vihicle = new Vihicle();
        vihicle.run("汽車");
        vihicle.runAir("飛機");
        vihicle.runWater("輪船");
    }
}

//方式3的分析
//1. 這種修改方法沒有對原來的類很大的修改,只是增長方法
//2. 這裏雖然沒有在類這個級別上遵照單一職責原則,可是在方法級別上,仍然是遵照單一職責

class Vihicle{
    void run(String vehicle) {
        System.out.println(vehicle + "在公路上運行。。。");
    }
    
    void runAir(String vehicle) {
        System.out.println(vehicle + "在天空上運行。。。");
    }
    
    void runWater(String vehicle) {
        System.out.println(vehicle + "在水裏運行。。。");
    }
}
複製代碼

三種寫法的分析

1.第一種寫法

第一種寫法是新手經常使用的一種寫法。寫法簡單,可是飛機在公路上運行確定是不正確的。也就是說,如今一個類負責了兩個職責(run方法中,在公路上運行是一個職責,而飛機不在公路上運行,因此飛機須要另外一個職責去實現)。

2.第二種寫法

第二種寫法遵照了單一職責原則,可是每次須要不一樣職責時,都須要建立一個類進行實現,成本太高

3.第三種寫法

第三種寫法雖然沒有在類這個級別上遵照單一職責原則,可是在方法上遵照了單一職責原則,當類方法足夠少的時候適用
下一篇連接(java設計模式學習筆記--接口隔離原則):

https://juejin.im/post/5d8726aee51d4561ae4da6e9java

相關文章
相關標籤/搜索