首页 > 代码库 > 装饰模式
装饰模式
装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
Component定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但是对于Component来说,是无需知道Decorator的存在的.至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能.
#pragma once //ConcreteComponent #include<iostream> #include<string> using namespace std; class Person { public: Person(){} Person(string lhs):name(lhs){} ~Person(void); virtual void Show() { cout<<"装扮的:"<<name<<endl; } private: string name; };
#pragma once #include "person.h" class CFinery : public Person { public: void Decorate(Person *components) { component = components; } virtual void Show() { component->Show(); } protected: Person *component; };
#pragma once #include "finery.h" class BigTrouser : public CFinery { public: virtual void Show() { cout<<"大裤衩"<<endl; CFinery::Show(); } };
#pragma once #include "finery.h" class Tshirts : public CFinery { public: Tshirts(void); ~Tshirts(void); virtual void Show() { cout<<"大Tshirt"<<endl; CFinery::Show(); } };
总结:装饰模式是为已有的功能动态地添加更多功能的一种方式.这种模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时候根据需要有选择的,有顺序的使用装饰功能包装对象了.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。