欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解裝飾器模式

 更新時間:2022年04月21日 16:47:10   作者:桃花鍵神  
裝飾器模式又名包裝(Wrapper)模式。裝飾器模式以對客戶端透明的方式拓展對象的功能,是繼承關(guān)系的一種替代方案,本篇文章以虹貓藍(lán)兔生動形象的為你帶來詳細(xì)講解

模式: 裝飾器模式

案例: 黑小虎抓住了七俠,把虹貓烤了

什么是裝飾器模式

裝飾器(Decorator)模式的定義: 指在不改變現(xiàn)有對象結(jié)構(gòu)的情況下,動態(tài)地給該對象增加一些職責(zé)(即增加其額外功能)的模式,它屬于對象結(jié)構(gòu)型模式。

優(yōu)點(diǎn)

1、裝飾器是繼承的有力補(bǔ)充,比繼承靈活,在不改變原有對象的情況下,動態(tài)的給一個對象擴(kuò)展功能,即插即用

2、通過使用不用裝飾類及這些裝飾類的排列組合,可以實(shí)現(xiàn)不同效果 3、裝飾器模式完全遵守開閉原則

缺點(diǎn)

裝飾器模式會增加許多子類,過度使用會增加程序得復(fù)雜性。

知識點(diǎn)

通常情況下,擴(kuò)展一個類的功能會使用繼承方式來實(shí)現(xiàn)。但繼承具有靜態(tài)特征,耦合度高,并且隨著擴(kuò)展功能的增多,子類會很膨脹。如果使用組合關(guān)系來創(chuàng)建一個包裝對象(即裝飾對象)來包裹真實(shí)對象,并在保持真實(shí)對象的類結(jié)構(gòu)不變的前提下,為其提供額外的功能,這就是裝飾器模式的目標(biāo)。下面來分析其基本結(jié)構(gòu)和實(shí)現(xiàn)方法。

裝飾器模式實(shí)現(xiàn)

案例: 黑小虎抓住了七俠,還要把虹貓烤了

抽象構(gòu)件(Component)角色:七俠

具體構(gòu)件(ConcreteComponent)角色:虹貓

抽象裝飾(Decorator)角色:加料

具體裝飾(ConcreteDecorator)角色:加鹽、加孜然。

七俠

七俠接口,聲明一個燒烤抽象方法

public interface Qi {
    void show();
}

虹貓

虹貓類實(shí)現(xiàn)七俠接口,并且實(shí)現(xiàn)了烤虹貓的方法

public class Hong implements Qi {
    @Override
    public void show() {
        System.out.println("燒烤一個虹貓");
    }
}

加料

這就是一個抽象的裝飾器,實(shí)現(xiàn)了七俠接口,聲明一個七俠屬性,用來調(diào)用七俠的燒烤方法

public class JiaLiao implements Qi {
    private Qi qi;
    JiaLiao() {
    }
    JiaLiao(Qi component) {
        this.qi = component;
    }
    @Override
    public void show() {
        qi.show();
    }
}

加鹽

繼承了抽象類,并且重寫了燒烤方法,加了一個鹽

public class Yan extends JiaLiao {
    private Qi qi;
    Yan() {
    }
    Yan(Qi qi) {
        super(qi);
    }
    @Override
    public void show() {
        super.show();
        add();
    }
    public void add() {
        System.out.println("加鹽");
    }
}

加孜然

繼承了抽象類,并且重寫了燒烤方法,加了一個孜然

public class ZiRan extends JiaLiao {
    private Qi qi;
    ZiRan() {
    }
    ZiRan(Qi qi) {
        super(qi);
    }
    @Override
    public void show() {
        super.show();
        add();
    }
    public void add() {
        System.out.println("加孜然");
    }
}

測試

new一個虹貓,把它烤了。

加點(diǎn)鹽

加點(diǎn)鹽和孜然

public class Demo {
    public static void main(String[] args) {
        Qi qi = new Hong();
        qi.show();
        System.out.println();
        Qi qi1 = new Yan(qi);
        qi1.show();
        System.out.println();
        Qi qi2 = new ZiRan(qi1);
        qi2.show();
    }
}

總結(jié)

不僅可以燒烤虹貓也可以燒烤其他七俠,只需要加一個類去實(shí)現(xiàn)七俠接口就行。

而且加鹽或者加孜然這些東西都不會改變虹貓的原本肉質(zhì)。

到此這篇關(guān)于Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解裝飾器模式的文章就介紹到這了,更多相關(guān)Java裝飾器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Iterator(迭代器)的用法詳解

    Java中Iterator(迭代器)的用法詳解

    Java迭代器(Iterator)是?Java?集合框架中的一種機(jī)制,它提供了一種在不暴露集合內(nèi)部實(shí)現(xiàn)的情況下遍歷集合元素的方法。本文主要介紹了它的使用方法,希望對大家有所幫助
    2023-05-05
  • Springboot如何使用filter對request body參數(shù)進(jìn)行校驗(yàn)

    Springboot如何使用filter對request body參數(shù)進(jìn)行校驗(yàn)

    這篇文章主要介紹了Springboot如何使用filter對request body參數(shù)進(jìn)行校驗(yàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Hibernate延遲加載原理與實(shí)現(xiàn)方法

    Hibernate延遲加載原理與實(shí)現(xiàn)方法

    這篇文章主要介紹了Hibernate延遲加載原理與實(shí)現(xiàn)方法,較為詳細(xì)的分析了Hibernate延遲加載的概念,原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • Java中的同步與異步詳細(xì)介紹

    Java中的同步與異步詳細(xì)介紹

    這篇文章主要介紹了Java中的同步與異步詳細(xì)介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • redis實(shí)現(xiàn)隊(duì)列的阻塞、延時、發(fā)布和訂閱

    redis實(shí)現(xiàn)隊(duì)列的阻塞、延時、發(fā)布和訂閱

    本文主要介紹了redis實(shí)現(xiàn)隊(duì)列的阻塞、延時、發(fā)布和訂閱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java實(shí)現(xiàn)圖片比率縮放

    Java實(shí)現(xiàn)圖片比率縮放

    這篇文章主要為大家詳細(xì)介紹了Java通過Thumbnails實(shí)現(xiàn)圖片比率縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時流事件處理方式

    redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時流事件處理方式

    這篇文章主要介紹了redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時流事件處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解spring-boot actuator(監(jiān)控)配置和使用

    詳解spring-boot actuator(監(jiān)控)配置和使用

    本篇文章主要介紹了spring-boot actuator(監(jiān)控)配置和使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java8 HashMap遍歷方式性能探討

    Java8 HashMap遍歷方式性能探討

    JDK8之前,可以使用keySet或者entrySet來遍歷HashMap,JDK8中引入了map.foreach來進(jìn)行遍歷
    2021-09-09
  • Java多線程 中斷機(jī)制及實(shí)例詳解

    Java多線程 中斷機(jī)制及實(shí)例詳解

    這篇文章主要介紹了Java多線程 中斷機(jī)制及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論