亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年11月24日 10:20:41   作者:怪 咖@  
這篇文章主要介紹了Java設(shè)計(jì)模式中的設(shè)計(jì)原則之合成復(fù)用原則詳解,原則是盡量使用合成/聚合的方式,而不是使用繼承聚合關(guān)系表示的是整體和部分的關(guān)系,整體與部分可以分開(kāi),可以理解為成員變量和當(dāng)前類(lèi)的關(guān)系就是聚合關(guān)系,需要的朋友可以參考下

一、基本介紹

原則是盡量使用合成/聚合的方式,而不是使用繼承

聚合關(guān)系(Aggregation)表示的是整體和部分的關(guān)系,整體與部分可以分開(kāi)。 可以理解為成員變量和當(dāng)前類(lèi)的關(guān)系就是聚合關(guān)系。

public class A{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->private B b;}

組合關(guān)系:也是整體與部分的關(guān)系,但是整體與部分不可以分開(kāi)。也就是假如我創(chuàng)建A類(lèi),A類(lèi)當(dāng)中有個(gè)成員變量是B,而B(niǎo)也會(huì)隨著A的創(chuàng)建進(jìn)行實(shí)例化,這種叫組合關(guān)系。

public class A{
	private B b = new B();
}

如果要使用繼承關(guān)系,則必須嚴(yán)格遵循里氏替換原則。合成復(fù)用原則同里氏替換原則相輔相成的,兩者都是開(kāi)閉原則的具體實(shí)現(xiàn)規(guī)范。

時(shí)刻記住一句話(huà):針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程

合成復(fù)用原則的重要性

  1. 通常類(lèi)的復(fù)用分為繼承復(fù)用和合成復(fù)用兩種,繼承復(fù)用雖然有簡(jiǎn)單和易實(shí)現(xiàn)的優(yōu)點(diǎn),但它也存在以下缺點(diǎn)。繼承復(fù)用破壞了類(lèi)的封裝性。因?yàn)槔^承會(huì)將父類(lèi)的實(shí)現(xiàn)細(xì)節(jié)暴露給子類(lèi),父類(lèi)對(duì)子類(lèi)是透明的,所以這種復(fù)用又稱(chēng)為“白箱”復(fù)用。
  2. 子類(lèi)與父類(lèi)的耦合度高。父類(lèi)的實(shí)現(xiàn)的任何改變都會(huì)導(dǎo)致子類(lèi)的實(shí)現(xiàn)發(fā)生變化,這不利于類(lèi)的擴(kuò)展與維護(hù)。
  3. 它限制了復(fù)用的靈活性。從父類(lèi)繼承而來(lái)的實(shí)現(xiàn)是靜態(tài)的,在編譯時(shí)已經(jīng)定義,所以在運(yùn)行時(shí)不可能發(fā)生變化。

采用組合或聚合復(fù)用時(shí),可以將已有對(duì)象納入新對(duì)象中,使之成為新對(duì)象的一部分,新對(duì)象可以調(diào)用已有對(duì)象的功能,它有以下優(yōu)點(diǎn)。

  1. 它維持了類(lèi)的封裝性。因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象看不見(jiàn)的,所以這種復(fù)用又稱(chēng)為“黑箱”復(fù)用。
  2. 新舊類(lèi)之間的耦合度低。這種復(fù)用所需的依賴(lài)較少,新對(duì)象存取成分對(duì)象的唯一方法是通過(guò)成分對(duì)象的接口。
  3. 復(fù)用的靈活性高。這種復(fù)用可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行,新對(duì)象可以動(dòng)態(tài)地引用與成分對(duì)象類(lèi)型相同的對(duì)象。

二、應(yīng)用實(shí)例

1、示例一

發(fā)現(xiàn)問(wèn)題 :假如我有一個(gè)類(lèi)為C,他和D類(lèi)有同樣的方法update,Test2類(lèi)難道也要繼承C嗎?

public class Test2 extends D {
    public void add() {
        update();
    }
}
class D {
    public void update() {
    }
}

2、示例二

去除繼承關(guān)系,抽出來(lái)一個(gè)接口A,將A接口和Test1作為聚合關(guān)系,有必要的話(huà)也可以改為組合關(guān)系。這樣一來(lái)代碼耦合度就降低了,同時(shí)代碼也變得不是那么死板了。

public class Test1 {
    private A a;
    public void add() {
        a = new B();
        a.update();
    }
}
interface A {
    void update();
}
class B implements A {
    @Override
    public void update() {
    }
}

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

相關(guān)文章

  • Scala實(shí)現(xiàn)冒泡排序、歸并排序和快速排序的示例代碼

    Scala實(shí)現(xiàn)冒泡排序、歸并排序和快速排序的示例代碼

    這篇文章主要介紹了Scala實(shí)現(xiàn)冒泡排序、歸并排序和快速排序的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • springboot @RequiredArgsConstructor的概念與使用方式

    springboot @RequiredArgsConstructor的概念與使用方式

    這篇文章主要介紹了springboot @RequiredArgsConstructor的概念與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • java導(dǎo)出csv格式文件的方法

    java導(dǎo)出csv格式文件的方法

    這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出csv格式文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼

    java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼

    這篇文章主要介紹了java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot使用LomBok的示例代碼

    SpringBoot使用LomBok的示例代碼

    這篇文章主要介紹了SpringBoot使用LomBok的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 全面了解Java中對(duì)于異常的捕捉方法

    全面了解Java中對(duì)于異常的捕捉方法

    這篇文章主要全面介紹了Java中對(duì)于異常的捕捉方法,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • java教程之java程序編譯運(yùn)行圖解(java程序運(yùn)行)

    java教程之java程序編譯運(yùn)行圖解(java程序運(yùn)行)

    最近重新復(fù)習(xí)了一下java基礎(chǔ),在使用javap的過(guò)程中遇到了一些問(wèn)題,這里便講講對(duì)于一個(gè)類(lèi)文件如何編譯、運(yùn)行、反編譯的。也讓自己加深一下印象
    2014-03-03
  • 詳解spring boot配置單點(diǎn)登錄

    詳解spring boot配置單點(diǎn)登錄

    本篇文章主要介紹了詳解spring boot配置單點(diǎn)登錄,常用的安全框架有spring security和apache shiro。shiro的配置和使用相對(duì)簡(jiǎn)單,本文使用shrio對(duì)接CAS服務(wù)。
    2017-03-03
  • SpringCache常用注解及key中參數(shù)值為null問(wèn)題解析

    SpringCache常用注解及key中參數(shù)值為null問(wèn)題解析

    這篇文章主要介紹了SpringCache常用注解及key中參數(shù)值為null的問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • spring?cloud?使用oauth2?問(wèn)題匯總

    spring?cloud?使用oauth2?問(wèn)題匯總

    這篇文章主要介紹了spring?cloud?使用oauth2?問(wèn)題匯總,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評(píng)論