Java設(shè)計(jì)模式七大原則之單一職責(zé)原則詳解
定義
單一職責(zé)原則(Single Responsibility Principle, SRP),有且僅有一個(gè)原因引起類的變更。簡(jiǎn)單來(lái)說(shuō),就是針對(duì)一個(gè)java類,它應(yīng)該只負(fù)責(zé)一項(xiàng)職責(zé)。例如一個(gè)Test.java類,它有兩個(gè)職責(zé):職責(zé)1,職責(zé)2。當(dāng)職責(zé)1進(jìn)行修改時(shí),有可能影響到職責(zé)2,所以需要將Test.java類拆分成Test1.java和Test2.java兩個(gè)單一職責(zé)的類。
案例
需求
有一個(gè)交通工具類,里面定義一個(gè)在各種交通工具的方法,創(chuàng)建交通工具的實(shí)例,調(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 + "在鐵軌上跑");
}
/**
* 飛機(jī)
* @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 + "在天上飛");
}定義測(cè)試類Test1.java
public class Test1 {
public static void main(String[] args) {
Transportation transportation1 = new Transportation();
transportation1.car("汽車");
transportation1.train("火車");
transportation1.airplane("飛機(jī)");
}
}方案二
定義汽車類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 + "在鐵軌上跑");
}
}定義飛機(jī)類Airplane.java
public class Airplane {
/**
* 飛機(jī)
* @author: liyajie
* @date: 2022/1/28 14:45
* @param airplane
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void airplane(String airplane) {
System.out.println(airplane + "在天上飛");
}
}定義測(cè)試類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("飛機(jī)");
}
}對(duì)比分析
方案一,是將汽車,火車,飛機(jī)的方法都寫(xiě)在了同一個(gè)類里,但是每個(gè)交通工具都有自己的方法,做到了方法上的單一職責(zé),如果發(fā)生變更,該方案改動(dòng)較小,但有一定的誤操作風(fēng)險(xiǎn)
方案二,是將汽車,火車,飛機(jī)分別創(chuàng)建三個(gè)類,每個(gè)類里只有一種交通工具的方法,做到了類上的單一職責(zé),如果發(fā)生變更,該方案改動(dòng)較大,沒(méi)有誤操作風(fēng)險(xiǎn)
總結(jié)
從以上的案例中總結(jié),可以得出:
- 降低類的復(fù)雜度,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé) (一個(gè)類職責(zé)少了,相應(yīng)的復(fù)雜度不就低了嘛)
- 提高類的可讀性以及可維護(hù)性 (相應(yīng)的復(fù)雜度降低了,代碼量就會(huì)減少,可讀性也就提高了,可維護(hù)性自然也就提高了)
- 降低變更引起的風(fēng)險(xiǎn) (一個(gè)類職責(zé)越多,變更的可能性就會(huì)越大,變化帶來(lái)的風(fēng)險(xiǎn)就會(huì)越大)
- 通常情況下,我們應(yīng)當(dāng)遵守類級(jí)別單一職責(zé)原則 (只有邏輯足夠簡(jiǎn)單,才可以在代碼中違反單一職責(zé)原則)
如何遵守單一職責(zé)原則
從業(yè)務(wù)出發(fā),從需求出發(fā),識(shí)別出同一個(gè)類型的職責(zé),進(jìn)行合理的職責(zé)分解。
到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之單一職責(zé)原則詳解的文章就介紹到這了,更多相關(guān)Java單一職責(zé)原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法
這篇文章主要介紹了SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
一文帶你看懂Android動(dòng)畫(huà)的實(shí)現(xiàn)原理
動(dòng)畫(huà)是 Android 應(yīng)用程序中重要的交互特性,ndroid 提供了多種動(dòng)畫(huà)效果,包括平移、縮放、旋轉(zhuǎn)和透明度等,它們可以通過(guò)代碼或 XML 來(lái)實(shí)現(xiàn),本文將介紹 Android 動(dòng)畫(huà)的原理和實(shí)現(xiàn)方法,并提供一些示例,需要的朋友可以參考下2023-07-07
springboot實(shí)現(xiàn)對(duì)注解的切面案例
這篇文章主要介紹了springboot實(shí)現(xiàn)對(duì)注解的切面過(guò)程,首先定義一個(gè)注解、再編寫(xiě)對(duì)注解的切面只是記錄的執(zhí)行時(shí)間和打印方法,可以實(shí)現(xiàn)其他邏輯,需要的朋友可以參考一下2022-01-01
Java語(yǔ)法基礎(chǔ)之for語(yǔ)句練習(xí)
以下是對(duì)Java語(yǔ)法基礎(chǔ)中的for語(yǔ)句進(jìn)行了詳細(xì)介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07
Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)條件與范圍查詢實(shí)例代碼
本篇文章主要介紹了Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)條件與范圍查詢實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06
Java中使用同步回調(diào)和異步回調(diào)的示例詳解
這篇文章主要介紹了Java中使用同步回調(diào)和異步回調(diào)的相關(guān)資料,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Spring Security 使用 OncePerRequestFilter
OncePerRequestFilter是一個(gè)過(guò)濾器,每個(gè)請(qǐng)求都會(huì)執(zhí)行一次;一般開(kāi)發(fā)中主要是做檢查是否已登錄、Token是否過(guò)期和授權(quán)等操作,而每個(gè)操作都是一個(gè)過(guò)濾器,下面介紹Spring Security 使用 OncePerRequestFilter 過(guò)濾器校驗(yàn)登錄過(guò)期、請(qǐng)求日志等操作方法,感興趣的朋友一起看看吧2024-06-06

