C++设计模式-装饰器(Decorator)

目录

C++设计模式-装饰器(Decorator)

一、意图

二、适用性

三、结构

四、参与者

五、代码


C++设计模式-装饰器(Decorator)

一、意图

动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

二、适用性

  • 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
  • 处理那些可以撤消的职责。
  • 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

三、结构

 C++设计模式-装饰器(Decorator)_第1张图片

四、参与者

  • Component

        定义一个对象接口,可以给这些对象动态地添加职责。

  • ConcreteDecorator

       定义一个对象,可以给这个对象添加一些职责。

  • Decorator

        维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。

  • ConcreteComponent

        向组件添加职责。

五、代码

#include
using namespace std;

class Component {
public:
	virtual void Operation() = 0;
};

class ConcreteComponent : public Component{
public:
	virtual void Operation() {
		cout << "ConcreteComponent" << endl;
	}
};

class Decorator : public Component {
public:
	Decorator(Component* tempComponent) :component(tempComponent) {}
	virtual void Operation() {
		component->Operation();
	}
private:
	Component* component;
};

class ConcreteDecoratorA : public Decorator {
public:
	ConcreteDecoratorA(Component* tempComponent) :Decorator(tempComponent) {}
	virtual void Operation() {
		Decorator::Operation();
		cout << "ConcreteDecoratorA" << endl;
	}
};

class ConcreteDecoratorB : public Decorator {
public:
	ConcreteDecoratorB(Component* tempComponent) :Decorator(tempComponent) {}
	virtual void Operation() {
		Decorator::Operation();
		cout << "ConcreteDecoratorB" << endl;
	}
};

int main() {
	Component* component = new ConcreteComponent;
	component->Operation();

	Component* componentA = new ConcreteDecoratorA(component);
	componentA->Operation();

	Component* componentB = new ConcreteDecoratorB(component);
	componentB->Operation();

	return 0;
}

你可能感兴趣的:(设计模式(C++),c++,设计模式,开发语言,装饰器模式)