设计模式C++实现(3)——装饰模式
来源:互联网 发布:淘宝怎么捡漏 编辑:程序博客网 时间:2024/06/09 05:44
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍装饰模式的实现。
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机,允许你为手机添加特性,比如增加挂件、屏幕贴膜等。一种灵活的设计方式是,将手机嵌入到另一对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。下面给出装饰模式的UML图。
在这种设计中,手机的装饰功能被独立出来,可以单独发展,进而简化了具体手机类的设计。下面给出Phone类的实现:
具体的手机类的定义:
装饰类的实现:
客户使用方式:
装饰模式提供了更加灵活的向对象添加职责的方式。可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。装饰模式提供了一种“即用即付”的方
法来添加职责。它并不试图在一个复杂的可定制的类中支持所有可预见的特征,相反,你可以定义一个简单的类,并且用装饰类给它逐渐地添加功能。可以从简单的部件组合出复杂的功能。[DP]
在本文的例子中,我们定义了两个具体的手机类,iPhone类和NokiaPhone类,通过单独的装饰类为它们添加特性,从而组合出复杂的功能。
备注:
装饰模式的装饰顺序很重要,比如加密数据和过滤词汇都可以是数据持久化前的装饰功能,但若先加密了数据再用过滤功能就会出问题了,
最理想的情况,是保证装饰类之间彼此独立,这样它们就可以任意的顺序进行组合了。
本文转自:
http://blog.csdn.net/wuzhekai1985/article/details/6672614
- 设计模式C++实现(3)——装饰模式
- 设计模式——装饰者模式(c++)
- 设计模式——装饰者模式(C++)
- 软考设计模式——装饰模式(C++)
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(7)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现(2)——装饰模式
- 设计模式C++实现(11)——装饰模式
- MySQL的auto_increment功能
- leetcode题解-25. Reverse Nodes in k-Group
- 用HTML前端技术做一个登入了界面+一些小技巧
- 测试工作---手动测试
- 工厂模式
- 设计模式C++实现(3)——装饰模式
- 成为Java顶尖程序员,先过了下面问题!
- php几点PSR基本代码规范
- 数据结构实验之查找六:顺序查找
- 谷歌搜索
- 杭电acm P2023求平均成绩
- sklearn文本特征提取
- 一个基于MFC多线程和Opencv库的打开两个摄像头实例
- CAFFE