大話設計模式-裝飾模式(C++)
《大話設計模式》的裝飾模式的C++實現。
結構圖:
DecoratZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vci5oOjwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#ifndef _DECORATOR_H
#define _DECORATOR_H
#include
#include
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<<"裝飾人:"<Show();
}
}
void CFinery::Decorate( CPerson *component )
{
m_pComponent = component;
}
void CTShirts::Show()
{
CFinery::Show();
cout<<"TShirts"<
main.cpp:
#include
#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;
}