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

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

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

一、基本介紹

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

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

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

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

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

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

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

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

  1. 通常類的復(fù)用分為繼承復(fù)用和合成復(fù)用兩種,繼承復(fù)用雖然有簡(jiǎn)單和易實(shí)現(xiàn)的優(yōu)點(diǎn),但它也存在以下缺點(diǎn)。繼承復(fù)用破壞了類的封裝性。因?yàn)槔^承會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類,父類對(duì)子類是透明的,所以這種復(fù)用又稱為“白箱”復(fù)用。
  2. 子類與父類的耦合度高。父類的實(shí)現(xiàn)的任何改變都會(huì)導(dǎo)致子類的實(shí)現(xiàn)發(fā)生變化,這不利于類的擴(kuò)展與維護(hù)。
  3. 它限制了復(fù)用的靈活性。從父類繼承而來的實(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. 它維持了類的封裝性。因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象看不見的,所以這種復(fù)用又稱為“黑箱”復(fù)用。
  2. 新舊類之間的耦合度低。這種復(fù)用所需的依賴較少,新對(duì)象存取成分對(duì)象的唯一方法是通過成分對(duì)象的接口。
  3. 復(fù)用的靈活性高。這種復(fù)用可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行,新對(duì)象可以動(dòng)態(tài)地引用與成分對(duì)象類型相同的對(duì)象。

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

1、示例一

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

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

2、示例二

去除繼承關(guān)系,抽出來一個(gè)接口A,將A接口和Test1作為聚合關(guān)系,有必要的話也可以改為組合關(guān)系。這樣一來代碼耦合度就降低了,同時(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)文章

  • Java事務(wù)失效八大場(chǎng)景詳細(xì)解析

    Java事務(wù)失效八大場(chǎng)景詳細(xì)解析

    在Java開發(fā)中Spring框架提供了強(qiáng)大的事務(wù)管理功能,然而在實(shí)際開發(fā)過程中,由于對(duì)框架特性的誤解或不當(dāng)使用,可能導(dǎo)致事務(wù)失效問題,這篇文章主要介紹了Java事務(wù)失效八大場(chǎng)景的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • Java實(shí)現(xiàn)XML與JSON秒級(jí)轉(zhuǎn)換示例詳解

    Java實(shí)現(xiàn)XML與JSON秒級(jí)轉(zhuǎn)換示例詳解

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)XML與JSON秒級(jí)轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 深入理解JavaWeb中過濾器與監(jiān)聽器的應(yīng)用

    深入理解JavaWeb中過濾器與監(jiān)聽器的應(yīng)用

    這篇文章主要介紹了JavaWeb中過濾器與監(jiān)聽器的應(yīng)用,過濾器能夠?qū)ζヅ涞恼?qǐng)求到達(dá)目標(biāo)之前或返回響應(yīng)之后增加一些處理代碼,監(jiān)聽器是一個(gè)接口內(nèi)容由我們實(shí)現(xiàn),會(huì)在特定時(shí)間被調(diào)用,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • Redis如何解決使用Session登錄帶來的共享問題

    Redis如何解決使用Session登錄帶來的共享問題

    文章首先介紹了Session的概念及其在實(shí)現(xiàn)登錄功能中的應(yīng)用,然后分析了Session共享問題及其原因,并提出使用Redis作為替代方案解決這一問題,接著,通過具體代碼示例展示了如何基于Session和Redis實(shí)現(xiàn)登錄功能,強(qiáng)調(diào)了Redis在解決Session共享問題上的優(yōu)勢(shì)
    2026-04-04
  • Java內(nèi)部類之間的閉包和回調(diào)詳解

    Java內(nèi)部類之間的閉包和回調(diào)詳解

    相信閉包和回調(diào)對(duì)每位學(xué)習(xí)Java的人來說都不陌生,那么今天小編和大家分享一篇關(guān)于Java內(nèi)部類之間的閉包和回調(diào),有需要的可以參考借鑒。
    2016-09-09
  • Java實(shí)現(xiàn)TCP通信示例代碼

    Java實(shí)現(xiàn)TCP通信示例代碼

    TCP(傳輸控制協(xié)議)是一種面向連接的、可靠的通信協(xié)議,這篇文章主要介紹了Java實(shí)現(xiàn)TCP通信的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • 淺談JavaIO之try with底層原理

    淺談JavaIO之try with底層原理

    眾所周知,所有被打開的系統(tǒng)資源,比如流、文件或者Socket連接等,都需要被開發(fā)者手動(dòng)關(guān)閉,否則隨著程序的不斷運(yùn)行,資源泄露將會(huì)累積成重大的生產(chǎn)事故。本文將介紹JavaIO之try with底層原理。
    2021-06-06
  • SpringBoot@Componet注解注入失敗的問題

    SpringBoot@Componet注解注入失敗的問題

    這篇文章主要介紹了SpringBoot@Componet注解注入失敗的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • JVM(Java?Virtual?Machine,Java虛擬機(jī))的作用詳解

    JVM(Java?Virtual?Machine,Java虛擬機(jī))的作用詳解

    JVM是Java語言實(shí)現(xiàn)“一次編寫,到處運(yùn)行”特性的基石,也是Java平臺(tái)的核心組成部分,其主要作用包括平臺(tái)無關(guān)性、內(nèi)存管理、運(yùn)行Java程序、安全性以及性能優(yōu)化,通過這些功能,JVM確保了Java程序的可移植性、高效性和安全性
    2025-03-03
  • Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼

    Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評(píng)論

仙桃市| 和林格尔县| 通渭县| 兴和县| 红安县| 蒙城县| 高淳县| 汾阳市| 纳雍县| 曲阳县| 庐江县| 聊城市| 吉林市| 闵行区| 东兴市| 辽阳市| 蓬安县| 平陆县| 和田县| 广汉市| 承德市| 赤壁市| 威海市| 上犹县| 普宁市| 寻甸| 连州市| 左贡县| 钟山县| 神池县| 楚雄市| 彩票| 娄底市| 慈利县| 宣城市| 科技| 长兴县| 会宁县| 和硕县| 锡林浩特市| 黔西|