装饰模式的核心思想是:在不修改原类文件、不使用继承的前提下,通过创建一个包装对象(即"装饰")来动态扩展一个对象的功能。

当需要给已有的类添加功能时,如果用继承来实现,会增加系统的复杂性和继承层次深度。装饰模式的做法是通过组合而非继承来达到目的。

《代码大全》中有这样一个场景:一个功能复杂而齐全的类,但我只需要其中部分接口和功能,这时就可以通过装饰模式包装出一个新类。

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

};

class ConCreateComponent :public Component
{
public:
	virtual void Operation()override
	{

	}
};


class Decorator :public Component
{
public:
	virtual void Operation()override
	{

	}


};



class ConCreateDecorator :public Decorator
{
public:
	virtual void Operation()override
	{
		_component->Operation();
		this->AddedBehavior();
	}

	void AddedBehavior()
	{
		cout << __FUNCTION__ << endl;
	}

	ConCreateDecorator(Component*com)
	{
		this->_component = com;
	}
private:
	Component* _component;


};




int main(int argc, char *argv[])
{


	Decorator* dec = new ConCreateDecorator(new ConCreateComponent);
	dec->Operation();


	system("pause");
	return 0;
}