C + + implementation of the decorative mode of "Big talk design mode".
Structure diagram:
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 ();p rotected:private:string m_sname;}; Class Cfinery:public Cperson{public://cfinery (CPerson *tmp): M_pcomponent (tmp) {};void decorate (CPerson *component); void Show ();p Rotected:private:CPerson *m_pcomponent;};/ /concretedecoratorclass ctshirts:p ublic 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 ();p rotected:private:}; #endif
Decorator.cpp:
#include "Decorator.h" void Cperson::show () {cout<< "decorator:" <<M_SNAME<<ENDL;} void Cfinery::show () {if (m_pcomponent! = NULL) {m_pcomponent->show ();}} void Cfinery::D ecorate (CPerson *component) {m_pcomponent = component;} void Ctshirts::show () {cfinery::show ();cout<< "Tshirts" <<ENDL;} void Cbigtrouser::show () {cfinery::show ();cout<< "Down Pants" <<ENDL;}
Main.cpp:
#include <iostream> #include "Decorator.h" using namespace Std;int Main () {//Adornment mode CPerson person ("Lin"); Cbigtrouser Bigtrouser; Ctshirts Tshirts;bigtrouser. Decorate (&person); Tshirts.decorate (&bigtrouser); Tshirts.show (); return 0;}
Big talk design mode-decorative mode (c + +)