裝飾模式

一、模式簡介

定義:指在不改變現(xiàn)有對象結(jié)構(gòu)的情況下,動態(tài)地給該對象增加功能,達(dá)到裝飾效果。
場景:當(dāng)終極類增加功能時不能采用繼承方式。當(dāng)對象的功能要求可以動態(tài)地添加,也可以再動態(tài)地撤銷。

  • 角色結(jié)構(gòu):
  • 抽象構(gòu)件(Component)角色:定義一個抽象接口以規(guī)范準(zhǔn)備接收附加責(zé)任的對象。
  • 具體構(gòu)件(Concrete Component)角色:實現(xiàn)抽象構(gòu)件,通過裝飾角色為其添加一些職責(zé)。
  • 抽象裝飾(Decorator)角色:繼承抽象構(gòu)件,并包含具體構(gòu)件的實例,可以通過其子類擴展具體構(gòu)件的功能。
  • 具體裝飾(ConcreteDecorator)角色:實現(xiàn)抽象裝飾的相關(guān)方法,并給具體構(gòu)件對象添加附加的責(zé)任。

二、模式實現(xiàn)

以按鍵手機裝飾后成為智能手機為例子

public interface Phone { -> 抽象構(gòu)件
    void action();
}

public class KeyPhone implements Phone { -> 具體構(gòu)件
    @Override
    public void action() {
        System.out.println("按鍵手機可以打電話");
    }
}

public abstract class Decorator implements Phone { -> 抽象裝飾
    private Phone phone;

    public Decorator(Phone phone){
        this.phone = phone;
    }

    @Override
    public void action() {
        this.phone.action();
        this.decoration();
    }

    protected abstract void decoration();
}

public class SmartPhone extends Decorator { -> 具體裝飾
    public SmartPhone(Phone phone) {
        super(phone);
    }

    @Override
    protected void decoration() {
        System.out.println("智能手機可以玩游戲");
    }
}

裝飾前后效果對比

KeyPhone keyPhone = new KeyPhone();
keyPhone.action(); -> 裝飾前的功能

SmartPhone smartPhone = new SmartPhone(keyPhone);
smartPhone.action(); -> 裝飾后的功能
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在現(xiàn)實生活中,常常需要對現(xiàn)有產(chǎn)品增加新的功能或美化其外觀,如房子裝修、相片加相框等。在軟件開發(fā)過程中,有時想用一些...
    Zal哥哥閱讀 1,046評論 0 0
  • 1 裝飾器模式的定義 裝飾器模式: 動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,裝飾器模式相比生成子類更為...
    Jerry_1116閱讀 328評論 0 0
  • 罪惡的成績單 考試成績單以及成績排名,大家都懂得,以前上學(xué)的時候,這玩意往家里寄是真的要命。成績單還需要家長簽字,...
    stayiwithime閱讀 235評論 0 0
  • 適配器模式 定義:將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠...
    ztzt123閱讀 399評論 0 0
  • 設(shè)計模式———裝飾模式 例子:成績單報告 在面向?qū)ο蟮脑O(shè)計中,如果超過兩層繼承,可能就出設(shè)計問題了。這是經(jīng)驗總結(jié),...
    書筆年華閱讀 511評論 0 0

友情鏈接更多精彩內(nèi)容