1装饰模式的核心内容是:
A:通过中间这向多方发送消息
2装饰模式的作用:。
3装饰模式具体描述
装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,
是继承关系的一个替代方案,提供比继承更多的灵活性。
动态给一个对象增加功能,这些功能可以再动态的撤消。
增加由一些基本功能的排列组合而产生的非常大量的功能。
Mary过完轮到Sarly过生日,还是不要叫她自己挑了,
不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,
在背面写上“最好的的礼物,就是爱你的Fita”,
再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),
再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,
我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?
4装饰模式类图
5.代码:
#include<string>
#include<iostream>
usingnamespacestd;
//装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,
//是继承关系的一个替代方案,提供比继承更多的灵活性。
//动态给一个对象增加功能,这些功能可以再动态的撤消。
//增加由一些基本功能的排列组合而产生的非常大量的功能。
//
//Mary过完轮到Sarly过生日,还是不要叫她自己挑了,
//不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,
//在背面写上“最好的的礼物,就是爱你的Fita”,
//再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),
//再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,
//我们都是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;
}
运行结果如下: