設計模式七大原則之單一原則

什麼是單一職責?

單一職責的規定是某一個類只做一項專門的職責。
對於類來說, 一個類應該只負責一項專有的職責,如果A類負責兩個不同的職責: 職責1,職責2.當職責1需求變更而改變A		
時,可能造成職責2執行錯誤,所以需要將類A的力度分解爲A1,A2

爲什麼要設計爲單一職責?

(1) 降低類的複雜度, 一個類只需要負責一個專項職責
(2) 提高類的可讀性和可維護性
(3) 降低業務變更引起的風險

案例演示01 - 非單一原則

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

/***
 * 車輛類,其中定義一個run()方法,代表運行
 */
class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在路上運行");
    }
}

很顯然,輸出的結果會是:
            汽車在路上運行
            飛機在路上運行
單一職責的規定是某一個類只做一項專門的職責。當前Vehicle這個類違反了單一職責的規定,汽車的運行和飛機的運行很顯然不能共用

案例演示02 - 單一原則

public class SinglePrinciple01 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        AirVehicle airVehicle = new AirVehicle();
        WaterVehicle waterVehicle = new WaterVehicle();

        roadVehicle.run("公交車");
        airVehicle.run("飛機");
        waterVehicle.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 + "在水上運行");
    }
}

輸出的結果會是:
         汽車在路上運行
         飛機在天上運行
         輪船在水上運行
遵守了單一職責,但是針對了類做拆分,改動較大,如果每個類中只有少量(假設只有一個)方法, 設計就會顯得有點龐大

案例演示03 - 單一原則

public class SinglePrinciple02 {
    public static void main(String[] args) {
        Vehicle02 vehicle02 = new Vehicle02();
        vehicle02.roadRun("火車");
        vehicle02.airRun("飛機");
        vehicle02.waterRun("水上");
    }
}

class Vehicle02 {
    public void roadRun(String vehicle) {
        System.out.println(vehicle + "在路上運行");
    }

    public void airRun(String vehicle) {
        System.out.println(vehicle + "在天上運行");
    }

    public void waterRun(String vehicle) {
        System.out.println(vehicle + "在水上運行");
    }
}

輸出的結果會是:
         汽車在路上運行
         飛機在天上運行
         輪船在水上運行
這種方式沒有在類級別上遵守單一職責,但是在方法級別上遵守了單一職責。只有在邏輯足夠簡單的情況下,才推薦使用這種方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章