《大话设计模式》的装饰模式的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
#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;
}
#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;
}