大话设计模式-装饰模式(C++)

《大话设计模式》的装饰模式的C++实现。

结构图:


Decorator.h:

#ifndef _DECORATOR_H
#define _DECORATOR_H

#include <iostream>
#include <string>
using namespace std;

//ConcreteComponent类
class CPerson
{
public:
	CPerson(){};
	CPerson(string str):m_sName(str){};
	virtual void Show();
protected:
private:
	string m_sName;
};

class CFinery : public CPerson
{
public:
	//CFinery(CPerson *tmp):m_pComponent(tmp){};
	void Decorate(CPerson *component);
	void Show();
protected:
private:
	CPerson *m_pComponent;
};

//ConcreteDecorator
class CTShirts :public CFinery
{
public:
	//CTShirts(CPerson *tmp):m_pComponent(tmp){};
	void Show();
protected:
private:
};

class CBigTrouser : public CFinery
{
public:
	//CBigTrouser(CPerson *tmp):m_pComponent(tmp){};
	void Show();
protected:
private:
};

#endif


Decorator.cpp:
#include "Decorator.h"

void CPerson::Show()
{
	cout<<"装饰人:"<<m_sName<<endl;
}


void CFinery::Show()
{
	if (m_pComponent != NULL)
	{
		m_pComponent->Show();
	}
}

void CFinery::Decorate( CPerson *component )
{
	m_pComponent = component;
}
void CTShirts::Show()
{
	CFinery::Show();
	cout<<"TShirts"<<endl;
}

void CBigTrouser::Show()
{
	CFinery::Show();
	cout<<"垮裤"<<endl;
}


main.cpp:
#include <iostream>
#include "Decorator.h"
using namespace std;


int main()
{	//装饰模式
	CPerson person("lin");
	CBigTrouser bigtrouser;
	CTShirts Tshirts;
	bigtrouser.Decorate(&person);
	Tshirts.Decorate(&bigtrouser);
	Tshirts.Show();

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值