老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Java描述設計模式(09):裝飾模式-創新互聯

本文源碼:GitHub·點這里 || GitEE·點這里

創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、網站建設、外貿網站建設、阜平網絡推廣、重慶小程序開發、阜平網絡營銷、阜平企業策劃、阜平品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創新互聯為所有大學生創業者提供阜平建站搭建服務,24小時服務熱線:028-86922220,官方網址:www.cdcxhl.com

一、生活場景

1、場景描述

孫悟空有七十二般變化,他的每一種變化都給他帶來一種附加的本領。他變成魚兒時,就可以到水里游泳;他變成鳥兒時,就可以在天上飛行。

2、場景圖解

Java描述設計模式(09):裝飾模式

3、代碼實現

public class C01_InScene {
    public static void main(String[] args) {
        TheGreatestSage greatestSage = new Monkey();
        TheGreatestSage fish = new Fish(greatestSage);
        fish.shapeDesc();
        // 這里雖然是魚形態,但是本體是悟空,所以可以直接變化
        TheGreatestSage bird = new Bird(fish);
        bird.shapeDesc();
    }
}
// 頂級接口
interface TheGreatestSage {
    // 定義一個描述形態的方法
    void shapeDesc ();
}
// 悟空本尊
class Monkey implements TheGreatestSage{
    @Override
    public void shapeDesc() {
        System.out.println("Monkey.move()");
    }
}
// 包裝一層變化的描述
class Change implements TheGreatestSage {
    private TheGreatestSage greatestSage;
    Change(TheGreatestSage greatestSage){
        this.greatestSage = greatestSage;
    }
    @Override
    public void shapeDesc() {
        greatestSage.shapeDesc();
    }
}
// 具體的變化形態
class Fish extends Change{
    public Fish(TheGreatestSage greatestSage) {
        super(greatestSage);
    }
    public void shapeDesc(){
        System.out.println("魚在水中游...");
    }
}
class Bird extends Change{
    public Bird(TheGreatestSage greatestSage) {
        super(greatestSage);
    }
    public void shapeDesc(){
        System.out.println("鳥在空中飛...");
    }
}

二、裝飾模式

1、基礎概念

裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案。
裝飾模式以對客戶透明的方式動態地給一個對象附加上更多的責任。換言之,客戶端并不會覺得對象在裝飾前和裝飾后有什么不同。裝飾模式可以在不使用創造更多子類的情況下,將對象的功能加以擴展。

2、核心角色

  • 抽象構件角色

    給出一個抽象接口,以規范準備接收附加責任的對象。

  • 具體構件角色

    定義一個將要接收附加責任的類。

  • 裝飾角色

    持有一個構件對象的實例,并定義一個與抽象構件接口一致的接口。

  • 具體裝飾角色

    負責給構件對象“貼上”附加的責任。

3、模式圖解

Java描述設計模式(09):裝飾模式

4、源代碼實現

// 抽象構件角色
interface Component {
    void sampleOperation();
}
// 具體構件角色
class ConcreteComponent implements Component{
    @Override
    public void sampleOperation() {
        System.out.println("業務相關代碼");
    }
}
//裝飾角色
class Decorator implements Component{
    private Component component;
    public Decorator(Component component){
        this.component = component;
    }
    @Override
    public void sampleOperation() {
        //委派給構件進行處理
        component.sampleOperation();
    }
}
// 具體裝飾角色
class ConcreteDecoratorA extends Decorator{
    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    @Override
    public void sampleOperation() {
        super.sampleOperation();
        System.out.println("A.處理相關業務的代碼");
    }
}
class ConcreteDecoratorB extends Decorator{
    public ConcreteDecoratorB(Component component) {
        super(component);
    }
    @Override
    public void sampleOperation() {
        super.sampleOperation();
        System.out.println("B.處理相關業務方法");
    }
}

5、該模式簡化

  • 簡化抽象類

如果只有一個ConcreteComponent類,那么可以考慮去掉抽象的Component類(接口),把Decorator作為一個ConcreteComponent子類。

  • 簡化裝飾類

如果只有一個ConcreteDecorator類,那么就沒有必要建立一個單獨的Decorator類,而可以把Decorator和ConcreteDecorator的責任合并成一個類。

6、半透明說明

1)、純粹的裝飾模式很難找到。裝飾模式的用意是在不改變接口的前提下,增強類的功能。

2)、在增強功能的時候,往往需要建立新的公開的方法。

3)、這就導致了大多數的裝飾模式的實現都是“半透明”的,而不是完全透明的。換言之,允許裝飾模式改變接口,增加新的方法。這意味著客戶端可以聲明ConcreteDecorator類型的變量,從而可以調用ConcreteDecorator類中才有的方法。

4)、半透明的裝飾模式是介于裝飾模式和適配器模式之間的。適配器模式的用意是改變類的接口,也可以通過改寫一個或幾個方法,或增加新的方法來增強類的功能。

5)、大多數的裝飾模式實際上是半透明的裝飾模式,這樣的裝飾模式也稱做半裝飾、半適配器模式。

三、實際應用

1、JDK中IO流

1)、基本描述

裝飾模式在Java語言中的最經典的應用就是Java I/O類庫的設計。很少單一的創建流對象,通過創建多個疊合對象來提供所期望的IO流功能,因此裝飾模式是Java I/O類庫的基本模式。

2)、IO流圖解描述

Java描述設計模式(09):裝飾模式

  • 抽象構件角色

由InputStream扮演。這是一個抽象類,為各種子類型提供統一的接口。

  • 具體構件角色

由FileInputStream、StringBufferInputStream等類扮演。它們實現了抽象構件角色所規定的接口。

  • 抽象裝飾角色

由FilterInputStream扮演。它實現了InputStream所規定的接口。

  • 具體裝飾角色

由幾個類扮演,分別是BufferedInputStream、DataInputStream以及兩個不常用到的類LineNumberInputStream、PushbackInputStream。

四、優缺點總結

1、模式的優點

(1)裝飾模式與繼承關系的目的都是要擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。裝飾模式允許系統動態決定“貼上”一個需要的“裝飾”,或者除掉一個不需要的“裝飾”。繼承關系則不同,繼承關系是靜態的,它在系統運行前就決定了。

(2)通過使用不同的具體裝飾類以及這些裝飾類的排列組合,工程師可以創造出很多不同行為的組合。

2、模式的優點

由于使用裝飾模式,可以比使用繼承關系需要較少數目的類。使用較少的類,當然使設計比較易于進行。但是,在另一方面,使用裝飾模式會產生比使用繼承關系更多的對象。

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述設計模式(09):裝飾模式

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享題目:Java描述設計模式(09):裝飾模式-創新互聯
文章分享:http://www.xueling.net.cn/article/dejiip.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲日韩欧美综合不卡在线 | 538在线一区二区精品国产 | 极品美女国产精品免费一区 | 内射毛片内射国产夫妻 | 韩国av一区二区三区 | 天堂国产 | 亚洲国产精品无码成人A片在线 | 国产成人福利在线观看 | 36d美女被视频在线观看 | 国产精品爽爽va吃奶在线观看 | 99久久婷婷国产综合精品青草免费 | 和人妻隔着帘子按摩中字 | 亚洲成人欧美 | 国产熟妇乱子伦视频在线观看 | 成人天堂视频在线观看 | 有剧情的av | 国产美女撒尿一区二区 | 亚洲的天堂AV无码 | 一二三区视频在线 | 久久精品人妻无码一区二区三区 | 亚洲免费看片网站 | 欧美淫片 | 欧美日韩免费一久久亚洲色WWW成人小说 | 免费观看爱爱视频 | 18禁网站免费无遮挡无码中文 | 91久久老司机福利精品网 | 国内一级黄色片 | 亚洲色图88 | 中文精品无码中文字幕无码专区 | 亚洲熟妇色XXXXX欧美老妇Y | 浪荡女天天不停挨CAO日常视频 | 一区二区三区少妇 | 91九色91蝌蚪 | 九九热免费视频在线观看 | 2020亚洲午夜无码天堂 | 人人藻人人澡人人爽 | 亚州av片| 久在线中文字幕乱码免费 | 欧美mv日韩mv国产网站 | 另类春色校园亚洲 | 成人看片在线观看 |