單一職責原則(Single Responsibility Principle),簡稱SRP。
定義:
There should never be more than one reason for a class to change.
應該有且僅有一個原因引起類別的變更。
有時候,開發人員設計介面的時候會有些問題,例如使用者的屬性和使用者的行為被放在一個介面中宣告。這就造成了業務對象和業務邏輯被放在了一起,這樣就造成了這個接口有兩種職責,接口職責不明確,按照SRP的定義就違背了接口的單一職責原則了。
以下是個例子:
package com.loulijun.chapter1; public interface Itutu { //身高 void setShengao(double height); double getShengao(); //体重 void setTizhong(double weight); double getTizhong(); //吃饭 boolean chiFan(boolean hungry); //上网 boolean shangWang(boolean silly); }
上面的例子就存在這個問題,身高、體重屬於業務對象,與之相應的方法主要負責使用者的屬性。而吃飯、上網是相應的業務邏輯,主要負責用戶的行為。但這就會給人一種不知道這個介面到底是做什麼的感覺,職責不清晰,後期維護的時候也會造成各種各樣的問題。
解決方法:單一職責原則,將這個介面分解成兩個職責不同的介面即可
ItutuBO.java:負責tutu(塗塗,假如是個人名)的屬性
package com.loulijun.chapter1; /** * BO:Bussiness Object,业务对象 * 负责用户的属性 * @author Administrator * */ public interface ItutuBO { //身高 void setShengao(double height); double getShengao(); //体重 void setTizhong(double weight); double getTizhong(); }
ItutuBL.java:負責塗裝的行為
package com.loulijun.chapter1; /** * BL:Business Logic,业务逻辑 * 负责用户的行为 * @author Administrator * */ public interface ItutuBL { //吃饭 boolean chiFan(boolean hungry); //上网 boolean shangWang(boolean silly); }
這樣就實現了介面的單一職責。那麼實作介面的時候,就需要有兩個不同的類別
TutuBO.java
package com.loulijun.chapter1; public class TutuBO implements ItutuBO { private double height; private double weight; @Override public double getShengao() { return height; } @Override public double getTizhong() { return weight; } @Override public void setShengao(double height) { this.height = height; } @Override public void setTizhong(double weight) { this.weight = weight; } }
TutuBL.java
package com.loulijun.chapter1; public class TutuBL implements ItutuBL { @Override public boolean chiFan(boolean hungry) { if(hungry) { System.out.println("去吃火锅..."); return true; } return false; } @Override public boolean shangWang(boolean silly) { if(silly) { System.out.println("好无聊啊,上会网..."); return true; } return false; } }
這樣就清晰了,當需要修改使用者屬性的時候只需要對ItutuBO這個介面來修改,只會影響到TutuBO這個類,不會影響其他類別。
那麼單一職責原則的意義何在呢?
降低類別的複雜性,實現什麼樣的職責都有清晰的定義
提高可讀性
#提高可維護性
降低變更所造成的風險,對系統擴充性和維護性很有幫助
但是、使用單一職責原則有一個問題,「職責」沒有一個明確的劃分標準,如果把職責劃分的太細的話會導致接口和實現類的數量劇增,反而提高了複雜度,降低了代碼的可維護性。所以使用這個職責的時候還要具體情況具體分析。建議就是介面一定要採用單一職責原則,實現類別的設計上盡可能做到單一職責原則,***是一個原因造成一個類別的變化。
以上是java設計模式的單一職責原則怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版