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


DecoratZ??http://www.2cto.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;
}