22装饰模式
1裝飾模式的核心內(nèi)容是:
A:通過中間這向多方發(fā)送消息
2裝飾模式的作用:。
3裝飾模式具體描述
裝飾模式:裝飾模式以對客戶端透明的方式擴展對象的功能,
是繼承關(guān)系的一個替代方案,提供比繼承更多的靈活性。
動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消。
增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。
?
Mary過完輪到Sarly過生日,還是不要叫她自己挑了,
不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的照片,
在背面寫上“最好的的禮物,就是愛你的Fita”,
再到街上禮品店買了個像框(賣禮品的MM也很漂亮哦),
再找隔壁搞美術(shù)設(shè)計的Mike設(shè)計了一個漂亮的盒子裝起來……,
我們都是Decorator,最終都在修飾我這個人呀,怎么樣,看懂了嗎?
4裝飾模式類圖
5.代碼:
#include<string>
#include<iostream>
usingnamespacestd;
?
//裝飾模式:裝飾模式以對客戶端透明的方式擴展對象的功能,
//是繼承關(guān)系的一個替代方案,提供比繼承更多的靈活性。
//動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消。
//增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。
//
//Mary過完輪到Sarly過生日,還是不要叫她自己挑了,
//不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的照片,
//在背面寫上“最好的的禮物,就是愛你的Fita”,
//再到街上禮品店買了個像框(賣禮品的MM也很漂亮哦),
//再找隔壁搞美術(shù)設(shè)計的Mike設(shè)計了一個漂亮的盒子裝起來……,
//我們都是Decorator,最終都在修飾我這個人呀,怎么樣,看懂了嗎?
classPerson
{
private:
???stringm_strName;
public:
???Person(stringstrName)
???{
???????m_strName =strName;
???}
???Person(){}
???virtualvoidshow()
???{
???????cout <<"裝扮的是:" << m_strName <<endl;
???}
};
?
classFinery :publicPerson
{
protected:
???Person *m_component;
public:
???voiddecorate(Person*component)
???{
???????m_component =component;
???}
???virtualvoidshow()
???{
???????m_component->show();
???}
};
?
classTShirts :publicFinery
{
public:
???virtualvoidshow()
???{
???????m_component->show();
???????cout <<"T shirts" <<endl;
???}
};
?
classBigTrouser :publicFinery
{
public:
???virtualvoidshow()
???{
???????m_component->show();
???????cout <<"BigTrouser"<<endl;
???}
};
?
intmain()
{
???Person *p = newPerson("小李");
???BigTrouser *bt = newBigTrouser();
???TShirts *ts = newTShirts();
?
???bt->decorate(p);
???ts->decorate(bt);
???ts->show();
???cin.get();
???return 0;
}
運行結(jié)果如下:
總結(jié)