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