裝飾者模式及C 實現

2021-06-03 16:10:20 字數 1576 閱讀 5724

裝飾者模式:動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案。

uml圖

設計原則:

1. 多用組合,少用繼承。

利用繼承設計子類的行為,是在編譯時靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件。

2. 類應設計的對擴充套件開放,對修改關閉。

要點:

1. 裝飾者和被裝飾物件有相同的超型別。

2. 可以用乙個或多個裝飾者包裝乙個物件。

3. 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。

4. 物件可以在任何時候被裝飾,所以可以在執行時動態的,不限量的用你喜歡的裝飾者來裝飾物件。

5. 裝飾模式中使用繼承的關鍵是想達到裝飾者和被裝飾物件的型別匹配,而不是獲得其行為。

6. 裝飾者一般對元件的客戶是透明的,除非客戶程式依賴於元件的具體型別。在實際專案中可以根據需要為裝飾者新增新的行為,做到「半透明」裝飾者。

7. 介面卡模式的用意是改變物件的介面而不一定改變物件的效能,而裝飾模式的用意是保持介面並增加物件的職責。

源**:

decorator.h

#include #include #include using namespace std;

//抽象類tank

class tank

//具體的坦克的裝飾類

virtual ~decorator()

void run() };

class infrareddecorator: public decorator

virtual ~infrareddecorator()

string get_infrared() const

void run() };

class amphibiandecorator:public decorator

~amphibiandecorator()

string get_amphibian() const

public:

void run() };

class gpsdecorator:public decorator

~gpsdecorator()

string get_gps() const

public:

void run()

};

decorator.cpp

#include "decorator.h"

int main(int argc, char **argv)

person(string name)

virtual void show()

void show()

};class toufa:public decorator

};class shoot:public decorator

};int main()

設計模式C 實現 裝飾者模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者和被裝飾者有同樣的超累型別。能夠用乙個或多個裝飾者包裝乙個物件。既然裝飾者和被裝飾者物件有同樣的超累型別,所以在不論什麼須要原始物件 被包裝的 的場合,能夠用裝飾過的物件取代它。裝飾者能夠託付被裝飾者的...

裝飾者模式及C 2

裝飾者模式 動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案。uml圖 設計原則 1.多用組合,少用繼承。利用繼承設計子類的行為,是在編譯時靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件。...

裝飾者模式 c

想象一下有如下的場景 有兩種主咖啡,可以搭配任意的飲料,我們的目標是允許類容易擴充套件,在不修改現有 的情況下,可以搭配新的行為。這裡可以用裝飾者模式來實現。裝飾者模式動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。這裡吹一下裝飾者模式的好處 首先構造基類 1 cl...