Java設(shè)計(jì)模式中的單一責(zé)任原則詳解
1、基本介紹
對(duì)類來(lái)說(shuō),即一個(gè)類應(yīng)該只負(fù)責(zé)一項(xiàng)職責(zé)。
如類A負(fù)責(zé)兩個(gè)不同職責(zé):職責(zé)1,職責(zé)2。當(dāng)職責(zé)1需求變更而改變A時(shí),可能造成職責(zé)2執(zhí)行錯(cuò)誤,所以需要將類A的粒度分為A1,A2
2、應(yīng)用實(shí)例
2.1未遵循單一責(zé)任原則
在方式1的run方法中,飛機(jī)在公路上運(yùn)行。明顯違反了單一責(zé)任原則
package com.weirdo.principle.singleResponsibility; public class SingleResponsibility1 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("摩托車"); vehicle.run("汽車"); vehicle.run("飛機(jī)"); } //交通工具類 static class Vehicle{ public void run(String vehicle){ System.out.println(vehicle+"在公路上運(yùn)行..."); } } }
2.2遵循單一責(zé)任原則(類級(jí))
遵守單一責(zé)任原則。
但是這樣做改動(dòng)很大,即將類分寫,同時(shí)需要修改客戶端。
package com.weirdo.singleResponsibility; public class SingleResponsibility2 { public static void main(String[] args) { RoadVehicle roadVehicle = new RoadVehicle(); roadVehicle.run("摩托車"); roadVehicle.run("汽車"); AirVehicle airVehicle = new AirVehicle(); airVehicle.run("飛機(jī)"); } static class RoadVehicle { public void run(String vehicle) { System.out.println(vehicle + "在公路上運(yùn)行..."); } } static class AirVehicle { public void run(String vehicle) { System.out.println(vehicle + "在天上上運(yùn)行..."); } } }
2.3遵循單一責(zé)任原則(方法級(jí))
這種修改方法沒(méi)有對(duì)原來(lái)的類做大的修改,只是增加方法。
然沒(méi)有在類這個(gè)級(jí)別上遵守單一責(zé)任原則,但是在方法級(jí)別上仍然是遵守單一責(zé)任
package com.weirdo.singleResponsibility; public class SingleResponsibility3 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.runAir("飛機(jī)"); vehicle.runRoad("汽車"); vehicle.runWater("航母"); } static class Vehicle { public void runRoad(String vehicle) { System.out.println(vehicle + "在公路上運(yùn)行..."); } public void runAir(String vehicle) { System.out.println(vehicle + "在公路上運(yùn)行..."); } public void runWater(String vehicle) { System.out.println(vehicle + "在水里運(yùn)行..."); } } }
3、注意事項(xiàng)
- 降低類的復(fù)雜都,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)
- 提高類的可讀性,可維護(hù)性
- 通常情況下,應(yīng)該遵守單一責(zé)任原則。只有邏輯足夠簡(jiǎn)單,才可以在代碼級(jí)違反單一責(zé)任原則:只有類中方法數(shù)量足夠少??梢栽诜椒?jí)別保持單一責(zé)任原則
到此這篇關(guān)于Java設(shè)計(jì)模式中的單一責(zé)任原則詳解的文章就介紹到這了,更多相關(guān)Java單一責(zé)任原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC執(zhí)行過(guò)程詳細(xì)講解
MVC是一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)組件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯,MVC分層有助于管理和架構(gòu)復(fù)雜的應(yīng)用程序2022-08-08kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼
這篇文章主要介紹了kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表
這篇文章主要介紹了SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java調(diào)用elasticsearch本地代碼的操作方法
這篇文章主要介紹了Java調(diào)用elasticsearch本地代碼的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Jasypt的StandardPBEByteEncryptor使用源碼解析
這篇文章主要介紹了Jasypt的StandardPBEByteEncryptor使用源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09