Java設計模式七大原則之合成復用原則詳解
定義
合成復用原則(Composite Reuse Principle),即盡量使用組合/聚合的方式,而不是使用繼承。
案例
需求
現在假設有一個A類,裡面有兩個方法,有一個B類,想要復用這兩個方法,請問有幾種方案
方案一
繼承的方式 定義A類,並定義兩個方法
/** * 類A * @author:liyajie * @createTime:2022/2/9 9:50 * @version:1.0 */ public class A { public void method1(){ System.out.println("你調用瞭方法一"); } public void method2(){ System.out.println("你調用瞭方法二"); } }
定義B類,並繼承A類
/** * 類B * @author:liyajie * @createTime:2022/2/9 9:51 * @version:1.0 */ public class B extends A{ }
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/9 9:52 * @version:1.0 */ public class Test { public static void main(String[] args) { new B().method1(); new B().method2(); } }
查看結果
方案二
組合或者聚合方式 定義A類,並定義兩個方法 和方案一相同,無需修改 定義B2類
/** * 類B2 * @author:liyajie * @createTime:2022/2/9 9:51 * @version:1.0 */ public class B2{ A a = new A(); public void method1(){ a.method1(); } public void method2(){ a.method2(); } }
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/9 9:52 * @version:1.0 */ public class Test2 { public static void main(String[] args) { new B().method1(); new B().method2(); } }
查看結果
方案三
依賴方式 定義A類,並定義兩個方法 和方案一相同,無需修改
定義B3類
/** * 類B3 * @author:liyajie * @createTime:2022/2/9 9:51 * @version:1.0 */ public class B3 { public void method1(A a){ a.method1(); } public void method2(A a){ a.method2(); } }
定義測試類
對比分析
方案一,使用繼承方式,B類繼承瞭A類之後,就可以使用瞭A類中的兩個方法,這樣耦合性較高,不推薦
方案二,該方案即為組合/聚合的方式,在B類裡註入A,通過註入的A類來調用方法,耦合性低,易擴展。符合合成復用的原則,推薦
方案三,該方案通過把A類作為參數傳遞到B類的兩個方法中,從而達到調用A類的方法,耦合性低。符合合成復用的原則,推薦
總結
合成復用原則簡單理解就一句話,盡量使用聚合和組合的方式,進行解耦,降低耦合性,而不是使用繼承。至此java設計模式的七大原則,我們就整理完畢,下面我們來概括歸納一下:
- 開閉原則:要求對擴展開放,對修改關閉
- 裡氏替換原則:不要破壞繼承體系
- 依賴倒置原則:要求面向接口編程
- 單一職責原則:實現類職責要單一
- 接口隔離原則:在設計接口的時候要精簡單一
- 迪米特法則:隻與直接的朋友的通信
- 合成復用原則:盡量使用聚合和組合的方式,而不是使用繼承
設計原則的核心思想
一切為瞭程序高內聚,低耦合服務
1.找出應用中可能需要變化之處,獨立出來,不要和不需要變化的代碼混在一起
2.針對接口編程,而不是針對實現編程
3.為瞭交互對象的松耦合設計而努力
到此這篇關於Java設計模式七大原則之合成復用原則詳解的文章就介紹到這瞭,更多相關Java合成復用原則內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!