标签:例子 pen show span 设计模式 argc code 技术 alt
一个例子,假设说你有一个一个的列车车厢,每一个车厢都有对运输功能作一些不同的增强,然后你选取一些这样的车厢,连接起来,形成一个专列,这个专列的功能就是组成它的那些车厢的功能的叠加。这些都是生活中比较典型的装饰模式
层层包装,增强功能。这就是装饰模式的要旨
对扩展开放,对修改关闭
动态的给一个对象添加额外的职责(不重要的职责)
想要扩展功能,装饰者提供有别于继承的另一种选择
实质:
把要添加的附加功能分别放在单独的类中,并让
这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功
能包装对象。
装饰者和被装饰者对象有相同的超类
#include <iostream> #include <string> using namespace std; //人 class Person{ private: string m_strName; public: Person(){} Person(string strName){ m_strName = strName; } virtual void show(){ cout <<"name is :"<<m_strName<<endl; } }; //装饰类 class Finery : public Person { protected: Person* m_componment; public: void Decroate(Person* compenment){ this->m_componment = compenment; // m_componment = compenment; } virtual void show(){ m_componment->show(); } }; //T恤 class Tshirt : public Finery{ public: virtual void show(){ cout <<"T shirt"<<endl; m_componment->show(); } }; //裤子 class Trouser : public Finery{ public : virtual void show(){ cout << "Trouser"<<endl; m_componment->show(); } }; int main(int argc, char *argv[]) { Person *p = new Person ("Sam"); Trouser *t = new Trouser(); Tshirt *ts = new Tshirt(); t->Decroate(p); ts->Decroate(t); ts->show();//显示是分别向上一层一层调用前面所有类的,这样以达到目的 return 0; }
标签:例子 pen show span 设计模式 argc code 技术 alt
原文地址:http://www.cnblogs.com/qccwx/p/6036640.html