首頁 > 軟體

Java設計模式七大原則之合成複用原則詳解

2022-02-09 19:01:18

定義

合成複用原則(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合成複用原則內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com