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

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

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

模式: 裝飾器模式

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

什么是裝飾器模式

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

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

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

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

缺點(diǎn)

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

知識(shí)點(diǎn)

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

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

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

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

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

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

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

七俠

七俠接口,聲明一個(gè)燒烤抽象方法

public interface Qi {
    void show();
}

虹貓

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

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

加料

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

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

加鹽

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

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("加鹽");
    }
}

加孜然

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

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("加孜然");
    }
}

測(cè)試

new一個(gè)虹貓,把它烤了。

加點(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é)

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

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

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

相關(guān)文章

  • 使用EasyExcel實(shí)現(xiàn)百萬(wàn)級(jí)別數(shù)據(jù)導(dǎo)出的代碼示例

    使用EasyExcel實(shí)現(xiàn)百萬(wàn)級(jí)別數(shù)據(jù)導(dǎo)出的代碼示例

    近期需要開發(fā)一個(gè)將百萬(wàn)數(shù)據(jù)量MySQL8的數(shù)據(jù)導(dǎo)出到excel的功能,所以本文講給大家介紹了基于EasyExcel實(shí)現(xiàn)百萬(wàn)級(jí)別數(shù)據(jù)導(dǎo)出,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java Structs框架原理案例詳解

    Java Structs框架原理案例詳解

    這篇文章主要介紹了Java Structs框架原理案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解SpringBoot中的統(tǒng)一功能處理的實(shí)現(xiàn)

    詳解SpringBoot中的統(tǒng)一功能處理的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)統(tǒng)一功能處理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下
    2023-01-01
  • java 取出文本文件中空行的實(shí)例代碼

    java 取出文本文件中空行的實(shí)例代碼

    這篇文章介紹了java 取出文本文件中空行的實(shí)例代碼,有需要的朋友可以參考一下
    2013-09-09
  • java中的快捷鍵小結(jié)

    java中的快捷鍵小結(jié)

    以下是myeclipse中的所有快捷鍵列表
    2013-03-03
  • SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot 整合 Mybatis Generator自動(dòng)生成dao、entity、mapper.xml實(shí)現(xiàn)單表增刪改查。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java設(shè)計(jì)模式之代理模式

    Java設(shè)計(jì)模式之代理模式

    這篇文章介紹了Java設(shè)計(jì)模式之代理模式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 使用logback配置按天和文件大小切割輸出日志

    使用logback配置按天和文件大小切割輸出日志

    這篇文章主要介紹了使用logback配置按天和文件大小切割輸出日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Windows使用多個(gè)JDK的方法詳解

    Windows使用多個(gè)JDK的方法詳解

    本文介紹了如何在Windows系統(tǒng)中同時(shí)使用多個(gè)JDK版本(JDK8和JDK21),并詳細(xì)描述了修改環(huán)境變量和Path變量的步驟,以實(shí)現(xiàn)JDK版本的切換
    2024-12-12
  • linux下java的安裝全過程

    linux下java的安裝全過程

    在Linux系統(tǒng)下安裝Java需要先檢查是否已有Java版本,如果有則先卸載,之后可以從華為云官網(wǎng)下載Java JDK的tar包,解壓到/usr/local目錄,并配置環(huán)境變量,最后通過命令行測(cè)試Java是否安裝成功
    2024-09-09

最新評(píng)論

三门县| 清徐县| 金昌市| 芦山县| 汶上县| 阜新市| 德庆县| 绥德县| 青冈县| 桂林市| 高要市| 白河县| 遂川县| 荥经县| 当雄县| 凭祥市| 新源县| 张北县| 华阴市| 汉阴县| 周口市| 泗洪县| 邯郸市| 永寿县| 留坝县| 荆州市| 黑河市| 威远县| 新宁县| 南开区| 泾源县| 桓台县| 松原市| 桃江县| 饶河县| 大英县| 西青区| 巴林左旗| 五莲县| 黔东| 晋宁县|