c++设计模式之装饰模式

 

装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。

           

 

Component:定义一个对象接口,可以给这些对象动态地添加职责;

ConcreteComponent:定义一个具体的Component,继承自ConcreateComponent,重写了Component类的虚函数;

Decorator:维持一个指向Component对象的指针,该指针指向需要被装饰的对象;并定义一个与Component接口一致的接口;

ConcreteDecorator:向组件添加职责。


 

#include <iostream>
using namespace std;
class component {
public:
	virtual void operation() = 0;
};  


/*
 * 主功能类
 */         
class ConcreteComponent : public component {
public:
	void operation()
	{
		cout << "ComncreteConpeonent's operation" << endl;
	}
};


/*
 * 装饰主类(辅助功能主类)
 */ 
class Decorator : public component {
private:
	component * pc;
public:
	Decorator( component *t )
	{
		pc = t;
	}


	void operation()
	{
	}


	void inter()
	{
		pc->operation();
	}
};


/*
 * 辅助A功能类
 */ 
class concreteDecoratorA : public Decorator {
private:
public:
	concreteDecoratorA( component *t ) : Decorator( t )
	{
	}


	void operation()
	{
		inter();
		cout << "concreteDecoratorA's operator" << endl;
	}
};


/*
 * 辅助B功能类
 */
class concreteDecoratorB : public Decorator {
private:
public:
	concreteDecoratorB( component *t ) : Decorator( t )
	{
	}


	void operation()
	{
		inter();
		cout << "concreteDecoratorB's operator" << endl;
	}
};
int main( void )
{
	component	* pa	= new ConcreteComponent();
	component	* pb	= new concreteDecoratorA( pa );
	component	* pc	= new concreteDecoratorB( pb );
	pc->operation();  
	return(0);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值