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!