设计模式---装饰

一、功能

    动态地给一个对象添加一些额外的功能。 

二、优缺点
    优点: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*指针,表明了它要作用的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值