decorator模式用于动态透明地为对象添加一些额外的功能。考虑一个手机的类,实现了基本的Call方法,同时要给他添加上其他功能例如上网,查询所在位置等方法。如果采用类继承的方法,但有时不能控制添加这些功能的时机,结果可能是较为复杂的类层次结构。而采用decorator模式,用户程序不必为不需要的特征付出代价。具体的实现方式是,首先定义一个接口对象(component类),定义一个子类实体对象(concreteComponent类)完成一些接口实现,一个装饰对象(decorator类)维护一个component对象指针。当需要为实体对象添加功能时,则定义子类实体装饰对象用于向组件添加方法。
Component ( VisualComponent )
定义一个对象接口,可以给这些对象动态地添加职责。
• ConcreteComponent ( TextView )
定义一个对象,可以给这个对象添加一些职责。
• Decorator
维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
• ConcreteDecorator(BoaderDecorator,ScrollDecorator)
向组件添加职责。
•Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。
class object
{
public:
object(){};
virtual void name()=0;
};
class cellPhone :public object
{
public:
virtual void name() { printf("a cell phone\n"); };
};
class phoneWrapper : public object
{
public:
virtual void name() { printf("a wrappered phone\n"); };
void setBase(object* pObj) { _pObj=pObj; };
private:
object* _pObj;
};
class phonePro : public phoneWrapper
{
public:
void LBS(){ printf("location based service\n"); };
};
int _tmain(int argc, _TCHAR* argv[])
{
cellPhone* aPhone=new cellPhone;
phonePro* aPhoneWrapper=new phonePro;
aPhoneWrapper->setBase(aPhone);
aPhoneWrapper->name();
getchar();
return 0;
}