Java設計模式七大原則之單一職責原則詳解
定義
單一職責原則(Single Responsibility Principle, SRP),有且僅有一個原因引起類的變更。簡單來說,就是針對一個java類,它應該只負責一項職責。例如一個Test.java類,它有兩個職責:職責1,職責2。當職責1進行修改時,有可能影響到職責2,所以需要將Test.java類拆分成Test1.java和Test2.java兩個單一職責的類。
案例
需求
有一個交通工具類,里面定義一個在各種交通工具的方法,創(chuàng)建交通工具的實例,調(diào)用方法,方法內(nèi)執(zhí)行打印操作
方案一
定義交通工具類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("飛機");
}
}對比分析
方案一,是將汽車,火車,飛機的方法都寫在了同一個類里,但是每個交通工具都有自己的方法,做到了方法上的單一職責,如果發(fā)生變更,該方案改動較小,但有一定的誤操作風險
方案二,是將汽車,火車,飛機分別創(chuàng)建三個類,每個類里只有一種交通工具的方法,做到了類上的單一職責,如果發(fā)生變更,該方案改動較大,沒有誤操作風險
總結(jié)
從以上的案例中總結(jié),可以得出:
- 降低類的復雜度,一個類只負責一項職責 (一個類職責少了,相應的復雜度不就低了嘛)
- 提高類的可讀性以及可維護性 (相應的復雜度降低了,代碼量就會減少,可讀性也就提高了,可維護性自然也就提高了)
- 降低變更引起的風險 (一個類職責越多,變更的可能性就會越大,變化帶來的風險就會越大)
- 通常情況下,我們應當遵守類級別單一職責原則 (只有邏輯足夠簡單,才可以在代碼中違反單一職責原則)
如何遵守單一職責原則
從業(yè)務出發(fā),從需求出發(fā),識別出同一個類型的職責,進行合理的職責分解。
到此這篇關于Java設計模式七大原則之單一職責原則詳解的文章就介紹到這了,更多相關Java單一職責原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot應用War包形式部署到外部Tomcat的方法
這篇文章主要介紹了SpringBoot應用War包形式部署到外部Tomcat的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼
本篇文章主要介紹了Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼,非常具有實用價值,需要的朋友可以參考下2017-06-06
Java中使用同步回調(diào)和異步回調(diào)的示例詳解
這篇文章主要介紹了Java中使用同步回調(diào)和異步回調(diào)的相關資料,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
Spring Security 使用 OncePerRequestFilter
OncePerRequestFilter是一個過濾器,每個請求都會執(zhí)行一次;一般開發(fā)中主要是做檢查是否已登錄、Token是否過期和授權(quán)等操作,而每個操作都是一個過濾器,下面介紹Spring Security 使用 OncePerRequestFilter 過濾器校驗登錄過期、請求日志等操作方法,感興趣的朋友一起看看吧2024-06-06

