国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java通俗易懂系列設計模式之裝飾模式

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:JaJian 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

介紹

裝飾模式,是面向對象編程領(lǐng)域中,一種動(dòng)態(tài)地往一個(gè)類(lèi)中添加新的行為的設計模式。就功能而言,裝飾模式相比生成子類(lèi)更為靈活,這樣可以給某個(gè)對象而不是整個(gè)類(lèi)添加一些功能。

意圖:動(dòng)態(tài)地給一個(gè)對象添加一些額外的職責和增加功能。

主要解決:一般的,我們?yōu)榱藬U展一個(gè)類(lèi)經(jīng)常使用繼承方式實(shí)現,由于繼承為類(lèi)引入靜態(tài)特征,并且隨著(zhù)擴展功能的增多,子類(lèi)會(huì )很膨脹。

何時(shí)使用:在不想增加很多子類(lèi)的情況下擴展類(lèi)。

如何解決:將具體功能職責劃分,同時(shí)繼承裝飾者模式。

關(guān)鍵代碼:

1、Component 類(lèi)充當抽象角色,不應該具體實(shí)現。

2、修飾類(lèi)引用和繼承 Component 類(lèi),具體擴展類(lèi)重寫(xiě)父類(lèi)方法。

實(shí)現

以結婚婚車(chē)為例,定義汽車(chē)接口

public interface Car {
    void drive();
}

創(chuàng )建實(shí)現接口的實(shí)體類(lèi),德國寶馬系應該是作為婚車(chē)最多的品牌,

public class BMW implements Car {
    @Override
    public void drive() {
        System.out.println("寶馬汽車(chē),風(fēng)馳電掣。");
    }
}

創(chuàng )建實(shí)現了 Car 接口的抽象裝飾類(lèi)。我們需要婚車(chē)接新娘

public abstract class WeddingCarDecorator implements Car{

    private Car decoratorCar;

    public WeddingCarDecorator(Car decoratorCar) {
        this.decoratorCar = decoratorCar;
    }

    @Override
    public void drive() {
        decoratorCar.drive();
    }
}

創(chuàng )建擴展了 WeddingCarDecorator 類(lèi)的實(shí)體裝飾類(lèi) - 寶馬婚車(chē)。

public class BMWWeddingCar extends WeddingCarDecorator {

    public BMWWeddingCar(Car decoratorCar) {
        super(decoratorCar);
    }

    @Override
    public void drive() {
        beautify();
        super.drive();
    }

    private void beautify() {
        System.out.println("結婚婚車(chē),鋪上鮮花,系上氣球。");
    }
}

使用 WeddingCarDecorator 來(lái)裝飾 Car對象。

public class DecoratorDemoMain {

    public static void main(String[] args) {

        System.out.println("------正常的德系寶馬------");
        BMW bmw = new BMW();
        bmw.drive();
        System.out.println("------作為婚車(chē)的德系寶馬------");
        BMWWeddingCar bmwWeddingCar = new BMWWeddingCar(bmw);
        bmwWeddingCar.drive();
    }
}

執行程序,輸出結果:

------正常的德系寶馬------

寶馬汽車(chē),風(fēng)馳電掣。

------作為婚車(chē)的德系寶馬------

結婚婚車(chē),鋪上鮮花,系上氣球。

類(lèi)圖

總結

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

裝飾類(lèi)和被裝飾類(lèi)可以獨立發(fā)展,不會(huì )相互耦合,裝飾模式是繼承的一個(gè)替代模式,裝飾模式可以動(dòng)態(tài)擴展一個(gè)實(shí)現類(lèi)的功能。

缺點(diǎn):

多層裝飾比較復雜,使用了許多類(lèi)似的對象(裝飾器)。
使用場(chǎng)景:

1、擴展一個(gè)類(lèi)的功能。

2、動(dòng)態(tài)增加功能,動(dòng)態(tài)撤銷(xiāo)。裝飾器模式在Java IO類(lèi)中經(jīng)常使用,例如FileReader,BufferedReader等。

注意事項:可代替繼承。

以上就是Java通俗易懂系列設計模式之裝飾模式的詳細內容,更多關(guān)于Java設計模式的資料請關(guān)注腳本之家其它相關(guān)文章!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

国产AV无码精品色午夜| 天堂在线WWW资源| 怡红院A∨人人爰人人爽| 人人色在线视频播放| 亚洲AV无码不卡无码| 成 人 免费 黄 色 网站视频|