问题:当我们想给一个现存的类添加新的功能的时候?我们可能想到的方法就是通过继承方式,向新的类中添加功能。毫无疑问这可以实现这个目的,但是需要添加的功能的类很多时候我们还用这种方式,会造成大量的子类。这种方式就不太适用了,我们该怎么办呢?
解决方案:
考虑到,这些需要添加功能的类,都用统一的接口,我们可以新建一个类,这个类实现这个接口,并组合这个接口,并在这个类中添加我们需要的功能。这样客户端就可以与新建类和现存类进行交互了;这个新建类就是一个装饰类,这个模式就是装饰模式
源代码:
#include <IOSTREAM>
using namespace std;
class Component{
protected:
Component(){}
public:
virtual void Operator()=0;
};
class ConcreateCoponent:public Component{
public:
ConcreateCoponent(){}
virtual void Operator(){cout<<"基本功能被调用"<<endl;}
};
class Decorator:public Component{
public:
Decorator(Component *com){this->com=com;}
virtual void Operator(){}
protected:
Component *com;
};
class ConcreateDecorator:public Decorator{
public:
ConcreateDecorator(Component *com):Decorator(com){}
virtual void Operator()
{
com->Operator();
AddOperator();
}
void AddOperator(){cout<<"附加功能被调用"<<endl;}
};
void main()
{
Component *com=new ConcreateCoponent;
Decorator *dec=new ConcreateDecorator(com);
dec->Operator();
}
PS:2012-11-18
装饰模式中的Decorator类存在的意思:当再次看到这个设计模式的时候,我第一感觉就是三个类就可以了,为什么就增加了一个ConcreateDecorator类,让Decorator成为一名不做工作的类呢?仔细想想,如果设计成三个类,那么,Decorator的职责将被限制死了。而设计成抽象类,那么他就可以衍生出多个子类,分别实现不同的功能。