裝飾者模式及C 2

2021-07-03 03:07:24 字數 3225 閱讀 4818

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

uml圖

設計原則:

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

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

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

要點:

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

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

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

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

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

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

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

源**:

decorator.h

[cpp]view plain

copy

print?

#include 

#include 

#include 

using

namespace

std;  

//抽象類tank

class

tank  

};  

//具體類 t50

class

t50:

public

tank  

void

run()  

public

:  virtual

~t50()  

};  

//具體類t75

class

t75:

public

tank  

void

run()  

public

:  virtual

~t75()  

};  

//具體類 t90

class

t90:

public

tank  

void

run()  

public

:  virtual

~t90()  

};  

//抽象類,decorator

class

decorator:

public

tank  

//具體的坦克的裝飾類

virtual

~decorator()  

public

:  void

shot()  

void

run()  

};  

class

infrareddecorator: 

public

decorator  

virtual

~infrareddecorator()  

public

:  void

set_infrared(

const

string &infrared)  

string get_infrared() const

void

run()  

void

shot()  

};  

class

amphibiandecorator:

public

decorator  

~amphibiandecorator()  

public

:  void

set_amphibian(

const

string &hibian)  

string get_amphibian() const

public

:  void

run()  

void

shot()  

};  

class

gpsdecorator:

public

decorator  

~gpsdecorator()  

public

:  void

set_gps(

const

string &gps)  

string get_gps() const

public

:  void

run()  

void

shot()  

};  

decorator.cpp

[cpp]view plain

copy

print?

#include "decorator.h"

intmain(

intargc, 

char

**argv)    

例2:test_decorator.cpp

[cpp]view plain

copy

print?

#include 

#include 

using

namespace

std;  

class

person  

person(string name)  

virtual

void

show()  

};  

class

decorator:

public

person  

void

show()  

};  

class

toufa:

public

decorator  

};  

class

shoot:

public

decorator  

};  

intmain()  

裝飾者模式及C 實現

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

裝飾者模式 c

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

裝飾者模式(C )

23種設計模式之一,英文叫decorator pattern,又叫裝飾者模式。裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。1 裝飾物件和真實物件有相同的介面。這樣客戶端物件就能以和真實物件相同的方式和裝飾物件互動...