Java設(shè)計(jì)模式七大原則之合成復(fù)用原則詳解
定義
合成復(fù)用原則(Composite Reuse Principle),即盡量使用組合/聚合的方式,而不是使用繼承。
案例
需求
現(xiàn)在假設(shè)有一個(gè)A類,里面有兩個(gè)方法,有一個(gè)B類,想要復(fù)用這兩個(gè)方法,請問有幾種方案
方案一
繼承的方式 定義A類,并定義兩個(gè)方法
/**
* 類A
* @author:liyajie
* @createTime:2022/2/9 9:50
* @version:1.0
*/
public class A {
public void method1(){
System.out.println("你調(diào)用了方法一");
}
public void method2(){
System.out.println("你調(diào)用了方法二");
}
}定義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();
}
}查看結(jié)果

方案二
組合或者聚合方式 定義A類,并定義兩個(gè)方法 和方案一相同,無需修改 定義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();
}
}查看結(jié)果

方案三
依賴方式 定義A類,并定義兩個(gè)方法 和方案一相同,無需修改
定義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類中的兩個(gè)方法,這樣耦合性較高,不推薦
方案二,該方案即為組合/聚合的方式,在B類里注入A,通過注入的A類來調(diào)用方法,耦合性低,易擴(kuò)展。符合合成復(fù)用的原則,推薦
方案三,該方案通過把A類作為參數(shù)傳遞到B類的兩個(gè)方法中,從而達(dá)到調(diào)用A類的方法,耦合性低。符合合成復(fù)用的原則,推薦
總結(jié)
合成復(fù)用原則簡單理解就一句話,盡量使用聚合和組合的方式,進(jìn)行解耦,降低耦合性,而不是使用繼承。至此java設(shè)計(jì)模式的七大原則,我們就整理完畢,下面我們來概括歸納一下:
- 開閉原則:要求對擴(kuò)展開放,對修改關(guān)閉
- 里氏替換原則:不要破壞繼承體系
- 依賴倒置原則:要求面向接口編程
- 單一職責(zé)原則:實(shí)現(xiàn)類職責(zé)要單一
- 接口隔離原則:在設(shè)計(jì)接口的時(shí)候要精簡單一
- 迪米特法則:只與直接的朋友的通信
- 合成復(fù)用原則:盡量使用聚合和組合的方式,而不是使用繼承
設(shè)計(jì)原則的核心思想
一切為了程序高內(nèi)聚,低耦合服務(wù)
1.找出應(yīng)用中可能需要變化之處,獨(dú)立出來,不要和不需要變化的代碼混在一起
2.針對接口編程,而不是針對實(shí)現(xiàn)編程
3.為了交互對象的松耦合設(shè)計(jì)而努力
到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之合成復(fù)用原則詳解的文章就介紹到這了,更多相關(guān)Java合成復(fù)用原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?ArrayList實(shí)現(xiàn)刪除指定位置的元素
目標(biāo):list中有0到39共40個(gè)元素,刪除其中索引是10、20、30的元素。本文為大家整理了三個(gè)不同的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-01-01
java實(shí)現(xiàn)的計(jì)算器功能示例【基于swing組件】
這篇文章主要介紹了java實(shí)現(xiàn)的計(jì)算器功能,結(jié)合實(shí)例形式分析了java基于swing組件實(shí)現(xiàn)計(jì)算器功能相關(guān)運(yùn)算操作技巧,需要的朋友可以參考下2017-12-12
java通過復(fù)選框控件數(shù)組實(shí)現(xiàn)添加多個(gè)復(fù)選框控件示例分享
編寫程序,通過復(fù)選框控件數(shù)組事先選擇用戶愛好信息的復(fù)選框,在該程序中,要求界面中的復(fù)選框數(shù)量可以根據(jù)指定復(fù)選框名稱的字符串?dāng)?shù)組的長度來自動調(diào)節(jié)2014-02-02

