C 設計模式 裝飾模式

2021-09-24 07:21:01 字數 1584 閱讀 5828

目錄

基本概念

**和例項

裝飾模式是為已有功能動態地新增更多功能的一種方式。

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

裝飾模式的優點:

1. 把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類;

2. 有效地把類的核心職責和裝飾功能區分開了。而且可以去除相關類中重複的裝飾邏輯。

結構圖如下(使用的大話設計模式的結構圖)

程式執行截圖如下:

**如下:

head.h

#ifndef head_h

#define head_h

#include #include using namespace std;

class component

};class concretecomponent: public component;

class decorator: public component;

class concretedecoratora: public decorator;

class concretedecoratorb: public decorator;

class concretedecoratorc: public decorator;

#endif // !head_h

head.cpp

#include "head.h"

void concretecomponent::operation()

decorator::decorator()

void decorator::setcomponent(component *component)

void decorator::operation()

}concretedecoratora::concretedecoratora()

void concretedecoratora::operation()

void concretedecoratorb::operation()

void concretedecoratorc::operation()

main.cpp

#include "head.h"

void main(void)

component是定義乙個物件介面,可以給這些物件動態地新增職責。concretecomponent是定義乙個具體的物件,也可以給這個物件新增一些職責。decorator,裝飾抽象類,繼承了component,從外類來擴充套件component類的功能,但對component來說,是無需知道decorator的存在的,置於concretedecorator是具體的裝飾物件,起到給component新增職責的功能

c 設計模式 裝飾模式

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

c 設計模式(裝飾模式)

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

設計模式 裝飾模式 C

動態地給乙個物件新增一些額外的職責。適用場景 1 在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責。2 處理那些可以取消的職責。3 不能或不好採用生成子類的方法擴充職責。就增加功能來說,裝飾模式相比生成子類更為靈活。有時我們希望給某個物件而不是整個類新增一些功能。比如有乙個手機,允許你...