設計模式 裝飾模式 C

2021-10-11 18:30:34 字數 1244 閱讀 3805

動態地給乙個物件新增一些額外的職責。

適用場景

1、在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。

2、處理那些可以取消的職責。

3、不能或不好採用生成子類的方法擴充職責。

就增加功能來說,裝飾模式相比生成子類更為靈活。有時我們希望給某個物件而不是整個類新增一些功能。比如有乙個手機,允許你為手機新增特性,比如增加掛件、螢幕貼膜等。一種靈活的設計方式是,將手機嵌入到另一物件中,由這個物件完成特性的新增,我們稱這個嵌入的物件為裝飾。這個裝飾與它所裝飾的元件介面一致,因此它對使用該元件的客戶透明。

#include

#include

using

namespace std;

class

phone

;class

iphone

:public phone

void

showdecorate()

private

: string m_name;};

class

nokiaphone

:public phone

void

showdecorate()

private

: string m_name;};

class

decoratorphone

:public phone

virtual

void

showdecorate()

};class

decoratorphonea

:public decoratorphone

void

showdecorate()

void

adddecorate()

};class

decoratorphoneb

:public decoratorphone

void

showdecorate()

void

adddecorate()

};intmain()

裝飾模式提供了更加靈活的向物件新增職責的方式。可以用新增和分離的方法,用裝飾在執行時刻增加和刪除職責。裝飾模式提供了一種「即用即付」的方法來新增職責。它並不試圖在乙個複雜的可定製的類中支援所有可預見的特徵,相反,你可以定義乙個簡單的類,並且用裝飾類給它逐漸地新增功能。可以從簡單的部件組合出複雜的功能。

c 設計模式 裝飾模式

裝 飾模式又名包裝模式,以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。它使用原來被裝飾的類的乙個子類的例項,把客戶端的呼叫委派到被裝 飾類,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。在以下情況下應使用裝飾模式 需要擴充套件乙個類的功能,或給乙個類增加附加責任。動態地給乙個物...

c 設計模式(裝飾模式)

動態地給乙個物件新增一些額外的職責 不重要的功能,只是偶然一次要執行 就增加功能來說,裝飾模式比生成子類更為靈活。建造過程不穩定,按正確的順序串聯起來進行控制。good 當你向舊的類中新增新 時,一般是為了新增核心職責或主要行為。而當需要加入的僅僅是一些特定情況下才會執行的特定的功能時 簡單點就是不...

C 設計模式 裝飾模式

目錄 基本概念 和例項 裝飾模式是為已有功能動態地新增更多功能的一種方式。當系統需要新功能的時候,是向舊系統的類中新增新 這些新 通常裝飾了原有類的核心職責或主要行為。裝飾模式的優點 1.把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類 2.有效地把類的核心職責和裝飾功能區分開了。而且可以去除相...