装饰模式
来源:互联网 发布:身份证复制软件3.7 编辑:程序博客网 时间:2024/05/21 08:02
装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,
我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。
装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系
。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。
装饰模式定义如下:
装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。
#include <iostream>#include <string>using namespace std;class Person{public: Person(string s=string("")){ m_name=s; } virtual void display(){ cout<<m_name<<endl; }private: string m_name;};//装饰类class Finery:public Person{public: Finery(Person *p=NULL){ m_p=p; } void decorate(Person*component){ m_p=component; } void display(){ if(m_p!=NULL) m_p->display(); } Person*m_p;};class Tshirt:public Finery{public: void display(){ cout<<"Tshirt"<<endl; if(m_p!=NULL) m_p->display(); }};class Trousers:public Finery{public: void display(){ cout<<"Trousers"<<endl; if(m_p!=NULL) m_p->display(); }};int main(){ Person *p=new Person("xiaoli"); Tshirt *t=new Tshirt; Trousers *tr=new Trousers; t->decorate(p); tr->decorate(t); tr->display(); return 0;}
阅读全文
0 0
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 读书笔记《C++ Primer》第五版——第十二章 动态内存
- 实用idea代码编辑快捷键
- Spring boot下 拦截器中的Service空指针异常解决方法
- 数据结构之排序二叉树递归建立,递归查找
- Lintcode 612. K个最近的点
- 装饰模式
- 第十三周java作业--集合框架
- Mysql基本命令之事务处理
- sql的基本语句
- Java拾遗系列- io知识
- Linux基础:日志管理
- DNS错误不能上网怎么办 电脑dns错误修复方法
- ZC702开发板-上电测试
- ASC1 E-Nice Patterns Strike Back