设计模式之Decoartor模式

Decoartor.h
#ifndef _DECOARTOR_H_
#define _DECOARTOR_H_
class CComponent
{
public:
	CComponent();
	virtual ~CComponent();
	virtual void Operator()=0;
private:
};

class CConcereteComponent:public CComponent
{
public:
	CConcereteComponent();
	~CConcereteComponent();
	void Operator();
};
class CDecoartor:public CComponent
{
public:
	CDecoartor(CComponent *_com);
	virtual ~CDecoartor();
	virtual void Operator()=0;
private:
protected:
	CComponent *_com;
};

class CConcerteDecorator:public CDecoartor
{
public:
	CConcerteDecorator(CComponent *_com);
	~CConcerteDecorator();
	void Operator();
	void AddBehaiveOperator();
private:
};
#endif
Decoator.cpp
#include <iostream>
#include <assert.h>
#include "Decorator.h"
using namespace std;
CComponent::CComponent()
{

}

CComponent::~CComponent()
{

}

CConcereteComponent::CConcereteComponent()
{

}

CConcereteComponent::~CConcereteComponent()
{

}

void CConcereteComponent::Operator()
{
	cout<<"CConcereteComponent Operator"<<endl;
}

CDecoartor::CDecoartor(CComponent *_com)
{
	assert(_com);
	this->_com=_com;
}

CDecoartor::~CDecoartor()
{


}

void CDecoartor::Operator()
{
	cout<<"CDecoartor Operator"<<endl;
}

CConcerteDecorator::CConcerteDecorator(CComponent *_com):CDecoartor(_com)
{

}

CConcerteDecorator::~CConcerteDecorator()
{

}

void CConcerteDecorator::Operator()
{
	assert(_com);
	_com->Operator();
	this->AddBehaiveOperator();
}
void CConcerteDecorator::AddBehaiveOperator()
{
	cout<<"CConcerteDecorator AddBehaiveOperator"<<endl;
}
Main.cpp
#include "Decorator.h"
int main()
{
	CComponent *com= new CConcereteComponent;
	CDecoartor *dec= new CConcerteDecorator(com);
	dec->Operator();
	delete dec;
	return 0;
}


Decorator模式除了采用组合的方式取得了比采用继承方式更好的效果,Decorator模式还给设计带来一种“即用即付”的方式来添加职责。在OO设计和分析经常有这样一种情况:为了多态,通过父类指针指向其具体子类,但是这就带来另外一个问题,当具体子类要添加新的职责,就必须向其父类添加一个这个职责的抽象接口,否则是通过父类指针是调用不到这个方法了。这样处于高层的父类就承载了太多的特征(方法),并且继承自这个父类的所有子类都不可避免继承了父类的这些接口,但是可能这并不是这个具体子类所需要的。而在Decorator模式提供了一种较好的解决方法,当需要添加一个操作的时候就可以通过Decorator模式来解决,你可以一步步添加新的职责。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值