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

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

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

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;
                }