Java設計模式七大原則之單一職責原則詳解

定義

單一職責原則(Single Responsibility Principle, SRP),有且僅有一個原因引起類的變更。簡單來說,就是針對一個java類,它應該隻負責一項職責。例如一個Test.java類,它有兩個職責:職責1,職責2。當職責1進行修改時,有可能影響到職責2,所以需要將Test.java類拆分成Test1.java和Test2.java兩個單一職責的類。

案例

需求

有一個交通工具類,裡面定義一個在各種交通工具的方法,創建交通工具的實例,調用方法,方法內執行打印操作

方案一

定義交通工具類Transportation.java

public class Transportation {

    /**
     * 汽車
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param car
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void car(String car) {
        System.out.println(car + "在公路上跑");
    }

    /**
     * 火車
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param train
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void train(String train) {
        System.out.println(train + "在鐵軌上跑");
    }

    /**
     * 飛機
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param airplane
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public static void airplane(String airplane) {
        System.out.println(airplane + "在天上飛");
    }

定義測試類Test1.java

public class Test1 {
    public static void main(String[] args) {
        Transportation transportation1 = new Transportation();
        transportation1.car("汽車");
        transportation1.train("火車");
        transportation1.airplane("飛機");
    }
}

方案二

定義汽車類Car.java

public class Car {

    /**
     * 汽車
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param car
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(String car) {
        System.out.println(car + "在公路上跑");
    }
}

定義火車類Train.java

public class Train {

    /**
     * 火車
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param train
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void train(String train) {
        System.out.println(train + "在鐵軌上跑");
    }
}

定義飛機類Airplane.java

public class Airplane {

    /**
     * 飛機
     * @author: liyajie
     * @date: 2022/1/28 14:45
     * @param airplane
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void airplane(String airplane) {
        System.out.println(airplane + "在天上飛");
    }
}

定義測試類Test2.java

public class Test2 {
    public static void main(String[] args) {
        Car car = new Car();
        car.car("汽車");

        Train train = new Train();
        train.train("火車");

        Airplane airplane = new Airplane();
        airplane.airplane("飛機");
    }
}

對比分析

方案一,是將汽車,火車,飛機的方法都寫在瞭同一個類裡,但是每個交通工具都有自己的方法,做到瞭方法上的單一職責,如果發生變更,該方案改動較小,但有一定的誤操作風險

方案二,是將汽車,火車,飛機分別創建三個類,每個類裡隻有一種交通工具的方法,做到瞭類上的單一職責,如果發生變更,該方案改動較大,沒有誤操作風險

總結

從以上的案例中總結,可以得出:

  • 降低類的復雜度,一個類隻負責一項職責 (一個類職責少瞭,相應的復雜度不就低瞭嘛)
  • 提高類的可讀性以及可維護性 (相應的復雜度降低瞭,代碼量就會減少,可讀性也就提高瞭,可維護性自然也就提高瞭)
  • 降低變更引起的風險 (一個類職責越多,變更的可能性就會越大,變化帶來的風險就會越大)
  • 通常情況下,我們應當遵守類級別單一職責原則 (隻有邏輯足夠簡單,才可以在代碼中違反單一職責原則)

如何遵守單一職責原則

從業務出發,從需求出發,識別出同一個類型的職責,進行合理的職責分解。

到此這篇關於Java設計模式七大原則之單一職責原則詳解的文章就介紹到這瞭,更多相關Java單一職責原則內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: