您的位置:首页 > 其它

设计模式---装饰

2013-12-27 09:57 351 查看
一、功能
动态地给一个对象添加一些额外的功能。

二、优缺点

优点:Decorator的目的是"动态的给一个对象添加一些额外的功能"。其关键之处在于"动态"和"对象"上。传统上依靠子类继承来实现功能的扩展,它针对的是整个类。但Decorator不使用继承,所以它只是针对单个对象实例进行功能的扩展。并且,从下面的示例代码中也可以看出,可以在运行时动态地、灵活地对功能进行组装

三、示例代码

namespace DesignPattern_Decorator
{	
	// class Component
	class Component
	{
	public:
		virtual ~Component() {}
		virtual void operation() = 0 ;
	} ;

	// class ConcreteComponent
	class ConcreteComponent : public Component
	{
	public:
		virtual ~ConcreteComponent() {}
		virtual void operation() 
		{
			// some operations
		}
	} ;

	// class Decorator
	class Decorator : public Component
	{
	public:
		Decorator(Component *pComponent) : _component(pComponent) { assert(_component) ; }
		virtual ~Decorator() { delete _component ; }
		virtual void operation() { _component->operation() ; }
	private:
		Component *_component ;
	} ;

	// class ConcreteDecoratorA
	class ConcreteDecoratorA : public Decorator
	{
	public:
		ConcreteDecoratorA(Component *pComponent) : Decorator(pComponent) {}
		virtual void operation() 
		{
			// some operations
			Decorator::operation() ;
			// some operations
		}
	} ;

	// class ConcreteDecoratorB
	class ConcreteDecoratorB : public Decorator
	{
	public:
		ConcreteDecoratorB(Component *pComponent) : Decorator(pComponent) {}
		virtual void operation() 
		{
			// some operations
			Decorator::operation() ;
			// some operations
		}
	} ;
}

客户端代码:
{
	using namespace DesignPattern_Decorator ;

	Component *p = new ConcreteDecoratorB(
			new ConcreteDecoratorA(
			    new ConcreteComponent())) ;
	p->operation() ;
}

上面代码的关键之处在于Decorator的构造函数中传入了一个Component*指针,表明了它要作用的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: