设计模式--装饰者模式
一、什么是装饰者模式
装饰者模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。通俗的话讲,就是为原有的类添加某些附加功能,这些功能代码只需要在装饰者类中添加,并不改变原有类的结构的情况下的一种设计方式。
二、代码结构实现装饰者模式
原有类
class Component
{
public:
virturl void doingSomething ()=0;
}
class ConcreteComponent:public Component
{
void doingSomething ()
{
// 具体功能
}
}
装饰者类
注意装饰者的继承关系,继承使得具备和原有类的功能; setComponent获取被装饰对象的指针,此处为获取 ConcreteComponent的指针,使用其功能。
class Decorator :public Component
{
public:
void setComponent(Component*cmp)
{
mComp=cmp;
}
void doingSomething ()
{
mComp-> doingSomething ();
}
void NewFunction();
Component*mComp;
}
// 待续。。。。
三、代码实现的注意事项
四、装饰者模式的使用方法
五、优缺点
优点:灵活拓展对象功能,通过多种装饰者类的排列组合可以创造出很多不同行为组合
缺点:过多使用会使得结构变得复杂,为何困难