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

来源:互联网 发布:新速特软件站快优影音 编辑:程序博客网 时间:2024/04/29 17:51

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


0 0