設計模式 穿什麼有這麼重要? 裝飾模式

2021-08-27 00:26:20 字數 2011 閱讀 4705

一,定義

英文名字:decorator pattern,又稱裝飾者模式。

裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

二,總結

裝飾模式什麼時候實用?

當系統需要新功能的時候,向舊的類中新增新的**,而新的**裝飾了原有類的核心職責或主要行為。

如果在主類中新增新的字段,新的方法和新的邏輯,從而增加了主類的複雜度。而這些新新增的類僅僅是滿足特定情況的特殊需要。

解決方案:裝飾模式,把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它要裝飾的物件,因此要執行特殊行為時,客戶端可以在執行時候有順序,有選擇的裝飾包裝物件。

三,例子

取自大話設計模式,小菜穿衣服。根據所穿不同衣服,穿衣服的順序分析乙個人風格?**內穿是普通人,**外穿是超人。

1)小菜扮靚第一版

下面程式,通過控制台可以完成扮靚的基本衣服型別。

缺點:如果要增加 「超人」 的裝扮(**外穿),怎麼辦?

更改person 類就違背了 開放 - 封閉原則,如何優化呢?把服飾寫成子類,方便擴充套件衣物子類。

#include using namespace std;

class person

~person(){}

void weartshirts()

2)小菜扮靚第二版

改進:增加了finery 服飾抽象類,和各種具體服飾子類,方便了擴充套件各種服飾子類,而不必更改person類,符合開放--封閉原則。

缺點:要顯示穿的什麼,還得在客戶端dtx.show() //顯示t恤 , kk.show() //顯示垮褲。相當於光著身子在大庭廣眾之下穿衣服,如何改進?

要內部組裝完畢,然後顯示出穿的什麼來。這個貌似建造者模式(但是建造者模式要求建造過程是穩定的,這裡可以內穿西裝外套t恤)

#include using namespace std;

class person

; void show(void)

3)小菜扮靚第三版

結構:person類需要穿衣服,讓抽象裝飾類繼承person類。然後繼承抽象服飾類,初始化服飾子類。

改進:相對於第二版,可以先將衣服穿好

(裝飾過程)

sneakers* pqx = new sneakers();

bigtrouser* kk = new bigtrouser();

tshirts* dtx = new tshirts();

pqx->decorator(xiaocai);

kk->decorator(pqx);

dtx->decorator(kk);

然後再顯示出來 dtx.show()

#include #include class person

; virtual void show(void)

; person(){};

private:

std::string m_name;

};//服飾類

class finery :public person

; void show(void)

};protected:

person* m_pcomponent;

};//具體服飾類

class tshirts :public finery

};class bigtrouser :public finery;};

class sneakers :public finery;};

class suit :public finery;};

class tie :public finery;};

class leathershoe :public finery;};

int main()

Java設計模式 裝飾者模

裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。大多數情況下被裝飾者不...

設計模式原來這麼簡單 裝飾器模式

1.什麼是裝飾器模式wiki 允許將行為靜態或動態地新增到單個物件中,而不會影響同一類中其他物件的行為。2.例項 以前用的qq秀,需要為角色穿不同的衣服 頭飾 臉飾 上衣 褲子。不同的衣服展示不同的形象,而且還可以 根據形象的炫酷值和好友pk。3.程式示例 qq秀角色 public inte ce ...

JAVA設計模式(九)設計模式之裝飾器設計模式

本章講解設計模式中裝飾器設計模式的相關知識 1.概念 與橋接模式類似,該模式也是為了解決類 的問題。但是裝飾器模式關注於功能的擴充套件,真實的角色比較穩定。橋接模式的真實角色在多維度之間不斷的變化,具有不確定性。2.裝飾器模式的實現思路 1 新建相應工程 其中,car 車 為基本物件,feature...