使用场景
扩展一个类的功能。
动态增加功能,动态撤销。
在OO设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通常继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。
#include<iostream>
using namespace std;
//组件
class Component
{
public:
virtual ~Component() {}
virtual void Operation() {}
protected:
Component() {}
private:
};
//具体组件
class ConcreteComponent : public Component
{
public:
ConcreteComponent() {}
~ConcreteComponent() {}
void Operation() { cout << "ConcreteComponent operation..." << endl; }
protected:
private:
};
//装饰器
class Decorator : public Component
{
public:
Decorator(Component* com) { this->_com = com; }
virtual ~Decorator() { delete _com; }
void Operation() {}
protected:
Component* _com;
private:
};
//具体装饰器
class ConcreteDecorator : public Decorator
{
public:
ConcreteDecorator(Component* com) : Decorator(com) {}
~ConcreteDecorator() {}
void Operation() { _com->Operation(); this->AddedBehavior(); }
void AddedBehavior() { cout << "ConcreteDecorator::AddedBehacior......" << endl; }
protected:
private:
};
int main()
{
Component* com = new ConcreteComponent();
Decorator* dec = new ConcreteDecorator(com);
dec->Operation();
delete dec;
return 0;
}
0 评论