设计模式-装饰模式
2017-04-18 09:33
190 查看
装饰模式(Decorator):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
装饰模式把类中的装饰功能从类中搬移去除,并把每个要装饰的功能放在单独的类中,用这个类包装要装饰的对象。因此在客户端可以有选择的、按顺序包装对象。
例如:对一个人进行装扮,可以用不同的服饰进行不同的打扮。
UML:
装饰模式把类中的装饰功能从类中搬移去除,并把每个要装饰的功能放在单独的类中,用这个类包装要装饰的对象。因此在客户端可以有选择的、按顺序包装对象。
例如:对一个人进行装扮,可以用不同的服饰进行不同的打扮。
UML:
//抽象类 class Person { public: virtual void show() = 0; }; //具体的对象 class PersonA :public Person{ private: string m_name; public: PersonA(string name) :m_name(name) {} virtual void show() { cout << "装扮的" << m_name << endl;; } }; //装饰抽象类 class Finery :public Person { private: Person *m_person; public: Finery(Person *person) :m_person(person) {} void show() { m_person->show(); } }; //具体装饰类 class TShirts :public Finery { public: TShirts(Person *person) :Finery(person){} void show() { cout << "T恤 "; Finery::show(); //调用基类show,相当于对基类进行装饰 } }; class BigTrouser :public Finery { public: BigTrouser(Person *person) :Finery(person) {} void show() { cout << "大垮裤 "; Finery::show(); } }; class Sneakers :public Finery { public: Sneakers(Person *person) : Finery(person) {} void show() { cout << "球鞋 "; Finery::show(); } }; int main() { Person *p = new PersonA("xiaoyu"); Sneakers *sk = new Sneakers(p); BigTrouser *bt = new BigTrouser(sk); TShirts *ts = new TShirts(bt); ts->show(); //ts->show,bt->show,sk->show,p->show system("pause"); return 0; }
相关文章推荐
- 设计模式---装饰模式
- NET设计模式之一:装饰模式(Decorator Pattern)
- 设计模式中结构型模式(四)装饰模式(Decorator)
- 设计模式c#描述——装饰(Decorator)模式
- 第四个设计模式:装饰模式
- 设计模式c#语言描述——装饰(Decorator)模式
- 结构型设计模式---Decorator模式(装饰模式)
- .NET设计模式研究之装饰模式
- 解读设计模式----装饰模式(Decorator Pattern)
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 用实例解说Dot Net设计模式——装饰模式
- 第四个设计模式:装饰模式
- AspectJ实现设计模式(七)—装饰模式
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 设计模式之---装饰(decorator)
- 设计模式c#语言描述——装饰(Decorator)模式
- 设计模式之装饰模式篇(Decorator)
- 设计模式之--装饰器模式的硬编码的静态装饰和链化
- 设计模式学习笔记-装饰模式
- 设计模式(11)-装饰模式(Decorator)