裝飾者模式:動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案。
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 裝飾物件和真實物件有相同的介面。這樣客戶端物件就能以和真實物件相同的方式和裝飾物件互動...