#include <iostream>
class Component
{
public:
virtual void Operation(){};
};
class ConcreteComponent: public Component
{
public:
virtual void Operation()
{
std::cout<<"orginal property"<<std::endl;
}
};
class Decorator: public Component
{
public:
Decorator(Component* co)
{
this->_co=co;
}
~Decorator()
{
delete _co;
}
protected:
Component* _co;
};
class ConcreteDecorator: public Decorator
{
public:
ConcreteDecorator(Component* coa):Decorator(coa) {};
virtual void Operation()
{
_co->Operation();
std::cout<<"AddBehavor"<<std::endl;
}
};
int main(int argc, char* argv[])
{
Component* com=new ConcreteComponent();
Decorator* dec=new ConcreteDecorator(com);
dec->Operation();
return 0;
}
注意ConcreteComponent和Decorator共用基类,统一接口,不过不统一, 也可以引用指针实现,即不Decorator 不继承Component, 但为什么一定要继承,我也不知道
Decorator 设计模式
最新推荐文章于 2022-04-17 20:30:30 发布