最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式七大原則之合成復(fù)用原則詳解

 更新時(shí)間:2022年02月09日 15:48:46   作者:溫故知新之java  
合成復(fù)用原則(Composite Reuse Principle),即盡量使用組合/聚合的方式,而不是使用繼承。本文將為大家具體介紹一下Java設(shè)計(jì)模式七大原則之一的合成復(fù)用原則,需要的可以參考一下

定義

合成復(fù)用原則(Composite Reuse Principle),即盡量使用組合/聚合的方式,而不是使用繼承。

案例

需求

現(xiàn)在假設(shè)有一個(gè)A類,里面有兩個(gè)方法,有一個(gè)B類,想要復(fù)用這兩個(gè)方法,請(qǐng)問有幾種方案

方案一

繼承的方式 定義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{
}

定義測(cè)試類

/**
 * 測(cè)試類
 * @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();
    }
}

定義測(cè)試類

/**
 * 測(cè)試類
 * @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();
    }
}

定義測(cè)試類

對(duì)比分析

方案一,使用繼承方式,B類繼承了A類之后,就可以使用了A類中的兩個(gè)方法,這樣耦合性較高,不推薦

方案二,該方案即為組合/聚合的方式,在B類里注入A,通過注入的A類來調(diào)用方法,耦合性低,易擴(kuò)展。符合合成復(fù)用的原則,推薦

方案三,該方案通過把A類作為參數(shù)傳遞到B類的兩個(gè)方法中,從而達(dá)到調(diào)用A類的方法,耦合性低。符合合成復(fù)用的原則,推薦

總結(jié)

合成復(fù)用原則簡(jiǎn)單理解就一句話,盡量使用聚合和組合的方式,進(jìn)行解耦,降低耦合性,而不是使用繼承。至此java設(shè)計(jì)模式的七大原則,我們就整理完畢,下面我們來概括歸納一下:

  • 開閉原則:要求對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉
  • 里氏替換原則:不要破壞繼承體系
  • 依賴倒置原則:要求面向接口編程
  • 單一職責(zé)原則:實(shí)現(xiàn)類職責(zé)要單一
  • 接口隔離原則:在設(shè)計(jì)接口的時(shí)候要精簡(jiǎn)單一
  • 迪米特法則:只與直接的朋友的通信
  • 合成復(fù)用原則:盡量使用聚合和組合的方式,而不是使用繼承

設(shè)計(jì)原則的核心思想

一切為了程序高內(nèi)聚,低耦合服務(wù)

1.找出應(yīng)用中可能需要變化之處,獨(dú)立出來,不要和不需要變化的代碼混在一起

2.針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程

3.為了交互對(duì)象的松耦合設(shè)計(jì)而努力

到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之合成復(fù)用原則詳解的文章就介紹到這了,更多相關(guān)Java合成復(fù)用原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    這篇文章主要介紹了淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 解決idea web 配置相對(duì)路徑問題

    解決idea web 配置相對(duì)路徑問題

    這篇文章主要介紹了idea web 配置相對(duì)路徑問題的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • SpringBoot自定義Starter與自動(dòng)配置實(shí)現(xiàn)方法詳解

    SpringBoot自定義Starter與自動(dòng)配置實(shí)現(xiàn)方法詳解

    在Spring Boot官網(wǎng)為了簡(jiǎn)化我們的開發(fā),已經(jīng)提供了非常多場(chǎng)景的Starter來為我們使用,即便如此,也無法全面的滿足我們實(shí)際工作中的開發(fā)場(chǎng)景,這時(shí)我們就需要自定義實(shí)現(xiàn)定制化的Starter
    2023-02-02
  • SpringBoot是如何使用SQL數(shù)據(jù)庫(kù)的?

    SpringBoot是如何使用SQL數(shù)據(jù)庫(kù)的?

    今天給大家?guī)淼氖顷P(guān)于Springboot的相關(guān)知識(shí),文章圍繞著SpringBoot是如何使用SQL數(shù)據(jù)庫(kù)的展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • springboot項(xiàng)目接入第三方qq郵箱驗(yàn)證登錄的全過程

    springboot項(xiàng)目接入第三方qq郵箱驗(yàn)證登錄的全過程

    互聯(lián)網(wǎng)發(fā)展到現(xiàn)在,相必大家都知道發(fā)送郵件應(yīng)該是網(wǎng)站的必備功能之一,下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目接入第三方qq郵箱驗(yàn)證登錄的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Java中BufferedReader與Scanner讀入的區(qū)別詳解

    Java中BufferedReader與Scanner讀入的區(qū)別詳解

    這篇文章主要介紹了Java中BufferedReader與Scanner讀入的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JAVA中讀取文件(二進(jìn)制,字符)內(nèi)容的幾種方法總結(jié)

    JAVA中讀取文件(二進(jìn)制,字符)內(nèi)容的幾種方法總結(jié)

    本篇文章主要介紹了JAVA中讀取文件(二進(jìn)制,字符)內(nèi)容的方法總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • SpringBoot瘦身打包部署的實(shí)現(xiàn)

    SpringBoot瘦身打包部署的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java算法練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)

    Java算法練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)

    方法下面小編就為大家?guī)硪黄狫ava算法的一道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Spring中的@ExceptionHandler注解詳解與應(yīng)用示例

    Spring中的@ExceptionHandler注解詳解與應(yīng)用示例

    本文詳細(xì)介紹了Spring框架中的@ExceptionHandler注解的用法,包括基本用法、全局異常處理、結(jié)合@ResponseStatus注解以及返回值類型,通過示例展示了如何使用@ExceptionHandler注解處理不同類型的異常,并提供定制化的異常處理響應(yīng),需要的朋友可以參考下
    2024-11-11

最新評(píng)論

会理县| 罗甸县| 夏邑县| 宿迁市| 开化县| 安图县| 平潭县| 轮台县| 全州县| 东山县| 河源市| 双桥区| 长治市| 观塘区| 丹阳市| 武隆县| 个旧市| 浑源县| 榆社县| 吉林省| 临安市| 石林| 资兴市| 石首市| 上栗县| 鞍山市| 巨鹿县| 南充市| 宁明县| 贵州省| 梧州市| 秦安县| 五指山市| 彰化市| 罗平县| 蒲城县| 永丰县| 织金县| 南丹县| 鹤岗市| 尚志市|