装饰者模式

本文深入解析装饰者模式的实现原理,通过C++代码示例展示了如何动态地为对象添加职责,而不改变其结构。装饰者模式允许在运行时增加功能,提供了一种比继承更具弹性的替代方案。
#include <iostream>
using namespace std;
class Component
{
public:
	virtual void Operation() = 0;
};
class ConCreateComponent: public Component
{
public:
	void Operation()override
	{
		cout << "具体对象的操作" << endl;
	}
};

class Decorator : public Component
{
public:
	public:
		void SetComponent(Component* component)			//设置Component
		{
			m_componnet = component;
		}
		void Operation()override					//重写Operation方法,实际执行的是m_componnet的Operation
		{
			if (m_componnet != NULL)
			{
				m_componnet->Operation();
			}
		}
protected:
	Component* m_componnet;
};

class ConCreateDecoratorA : public Decorator
{
public:
	void Operation()override
	{
		__super::Operation();							//执行父类中的操作
		//下面执行本类中自身的一些行为
		cout << "ConCreateDecoratorA的自身的行为" << endl;
		m_strName = string("ConCreateDecorator");		//首先执行的是父类中的Operation方法之后,然后执行本类中自己的行为
	}
private:
	//本类的独有功能
	string m_strName;
};

class ConCreateDecoratorB : public Decorator
{
public:
	void Operation()override
	{
		__super::Operation();
		//执行本类自身的行为
		cout << "ConCreateDecoratorB的自身的行为" << endl;
	}
};
int main()
{
	ConCreateComponent* c = new ConCreateComponent();
	ConCreateDecoratorA* A = new ConCreateDecoratorA();
	ConCreateDecoratorB* B = new ConCreateDecoratorB();

	A->SetComponent(c);
	B->SetComponent(A);
	B->Operation();


	system("pause");
	return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值