现在的位置: 首页 > 综合 > 正文

装饰模式

2013年10月31日 ⁄ 综合 ⁄ 共 1131字 ⁄ 字号 评论关闭

装饰模式(Decorator):动态的给一个对象添加一些额外的职责。

感觉这个模式可以和策略模式相比较一下,策略模式是动态灵活的改变不同的算法(由类中的setComponent(strategyX)),而装饰模式呢,setComponent(componentX);可以看出装饰模式是装饰的同类对象,大家都是继承相同的基类,实现某个相同的方法,在这个方法中,实现自己特有的操作,同时调用compoent的操作,来调用前面的操作。

装饰模式类关系图:

c++实现代码:

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

class ConcreteComponent : public Component
{
public :
	ConcreteComponent()
	{}
	ConcreteComponent(string n):name(n)
	{}
	void Operation()
	{
		cout << "对 " << name <<  " 的装饰过程完成 " << endl;
	}
private:
	string name;
};

class Decorator : public Component
{
public:
	void setComponent(Component *com)
	{
		component = com;
	}
	virtual void Operation() = 0;
protected:
	Component *component;
};

class ConcreteDecoratorA : public Decorator
{
public:
	void Operation();
	void BehaviorA()
	{
		cout << "A的装饰过程" << endl;
	}
};

void ConcreteDecoratorA::Operation()
{
	BehaviorA();
	component->Operation();
}

class ConcreteDecoratorB : public Decorator
{
public:
	void Operation();
	void BehaviorB()
	{
		cout << "B的装饰过程" <<endl;
	}
};

void ConcreteDecoratorB::Operation()
{
	BehaviorB();
	component->Operation();
}

class ConcreteDecoratorC : public Decorator
{
public:
	void BehaviorC()
	{
		cout << "C的装饰过程" << endl;
	}
	void Operation();
};

void ConcreteDecoratorC::Operation()
{
	BehaviorC();
	component->Operation();
}

参考:《大话设计模式》

抱歉!评论已关闭.