文档章节

Decorator模式

Ne0o0
 Ne0o0
发布于 2017/05/02 10:12
字数 187
阅读 2
收藏 0
//Decorator模式
class Component
{
public:
	Component(){}
	virtual~Component(){}
public:
	virtual void Operate()=0;
};
//具体实现,需要被添加特性的类,被装饰的类
class ConcreteComponent:public Component
{
public:
	ConcreteComponent(){}
	virtual ~ConcreteComponent(){}
public:
	void Operate(){printf("this is a ConcreteComponent!\n");}
};
//装饰器接口
class Decorator:public Component
{
public:
	Decorator(Component *pComponent){m_pComponent=pComponent;}
	virtual~Decorator(){}
public:
	void Operate(){printf("this is a Decorator!\n");}
protected:
	Component *m_pComponent;
};

class DecoratorA:public Decorator
{
public:
	DecoratorA(Component *pComponent):Decorator(pComponent){}
	~DecoratorA(){}
public:
	void Operate(){m_pComponent->Operate();AddBehaviorA();}
private:
	void AddBehaviorA(){printf("this is a AddBehaviorA!\n");}
};

class DecoratorB:public Decorator
{
public:
	DecoratorB(Component *pComponent):Decorator(pComponent){}
	~DecoratorB(){}
public:
	void Operate(){m_pComponent->Operate();AddBehaviorB();}
private:
	void AddBehaviorB(){printf("this is a AddBehaviorB!\n");}
};

//Decorator模式
int _tmain(int argc, _TCHAR* argv[])
{
	//Decorator模式
	Component *pCC=new ConcreteComponent;
	Decorator *pDa=new DecoratorA(pCC);//增加a特性
	Decorator *pDb=new DecoratorB(pDa);//增加b特性
	pDb->Operate();
	delete pDb;
	delete pDa;
	delete pCC;
	getchar();
	return 0;
}

© 著作权归作者所有

上一篇: Proxy模式
下一篇: Component模式
Ne0o0
粉丝 2
博文 70
码字总数 29011
作品 0
程序员
私信 提问

暂无文章

linux下ctrl+c中止不了

有一台centos7的服务器,ctrl+c无效,并且tail -f也无效,只能关掉终端或者crtl+z放入后台再删掉,但是ping的时候使用ctrl+c是有效果的。 出现这种情况的原因可能是因为有人要使用ruby安装r...

gaolongquan
3分钟前
0
0
Android三年工作面经

工作三年出来看看新的机会,依次面试过如下公司: 小米(北京) iHandy(北京) 涂鸦智能(杭州) 微软(北京) 宜信(北京) 蚂蚁金服(杭州) 瓜子二手车(北京) 高德(北京) 基本上投递的简历都得到了面...

JerryLin123
6分钟前
0
0
开发函数计算的正确姿势——tensorflow serving

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计...

阿里云云栖社区
10分钟前
4
0
社区角色(Kubernetes社区Maintainer是什么角色?)

社区成员按照角色,分为member、reviewer、approver、subproject owner。 下面我们介绍一下每个角色的职责和要求。 member reviewer approver subproject owner...

恋恋美食
27分钟前
0
0
【JavaScript】callee 与 caller

callee callee是函数参数arguments对象的一个属性,它指向参数arguments对象所在的函数自身。 function foo (x) {console.log(arguments.callee);return x;}foo(); 从控制台中可以看...

小草先森
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部