#include "stdafx.h" #include <iostream> #include <string> using namespace std; /************************************* 装饰模式 *************************************/ class Person { public: Person(){} Person(string strName) :name_(strName) {} virtual void Show() { cout << " 装饰的 "<< name_ << endl; } private: Person(const Person& p); string name_; }; /* 抽象 装饰 */ class Finery :public Person{ public: Finery():p_(NULL){} void Decorate(Person* p){ p_ = p; } void Show() { if (p_) { p_->Show(); } } protected: Person* p_; }; /* 具体装饰 */ class TShirts :public Finery { public: void Show() { cout << "T恤衫" << " "; Finery::Show(); } }; /* 具体装饰 */ class BigTrousers :public Finery { public: void Show() { cout << "大垮裤" << " "; Finery::Show(); } }; class LeatherShoes : public Finery{ public: void Show() { std::cout << "皮鞋" << " "; Finery::Show(); } }; int main() { Person* p = new Person("行人"); TShirts* pts = new TShirts(); BigTrousers* pbt = new BigTrousers(); LeatherShoes* pls = new LeatherShoes(); pts->Decorate(p); pbt->Decorate(pts); pls->Decorate(pbt); pls->Show();
return 0; }
为一个类添加额外的功能装饰
参考 大话设计模式