`
随枫霏
  • 浏览: 134208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式应用场景案例分析——装饰者

阅读更多

3. 装饰者


3.1 定义
对于不同功能之间的多种复杂的对象如果使用继承的方式,类的数量将会碰撞,而采用组合的方式,这样就可以在运行时实现不同的功能的组合。
装饰者模式可以动态的将职责附加到对象上。对于扩展功能的情况,提供了比继承更有弹性的解决方案。


看一下具体的实现。类图如下图所示。
Component是一个组件的抽象类,需要被装饰的组件和装饰者都需要实现该抽象类,该抽象类中的方法就是客户端需要调用的方法。
装饰者模式中的关键是装饰者Decorator需要持有一个组件对象Component的引用,这样其他的装饰者实现,可以引用上一层的引用,形成一个层层包裹的状态。
这样,在最外层的装饰者中调用方法,就会层层进入,从内向外一层一层的调用方法。装饰者可以控制方法的行为,在上一层的方法调用之后,加上自身的装饰实现。

3.2 举例

SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。
SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对ImageRender类的引用。
ReadRedner可以理解成一个组件,不是一个装饰者,因为ReadRender是所有渲染操作的第一步。
其他的子类DrawTextRender(水印处理),ScaleRender(缩略处理),WriterRender(输出)都是装饰者。
拿ScaleRender为例子,看一下它的render()类的实现。红色区域的内容,是上一层包装的实现调方法render()的调用,之后的操作是ScaleRender需要关注的图片缩略处理。


客户端的调用如下所示。ReadRender需要引入一个输入流,ScaleRender包裹ReadRender,WriteRender包裹ScaleRender,最后调用最外层的render()方法,处理图像处理,层层进入,
首先ReadRender读取图片数据,ScaleRender进行图片缩略,WriteReneder将处理之后的图片数据写入输出流中,完成一系列操作。



  • 大小: 155.9 KB
  • 大小: 68.6 KB
  • 大小: 15.7 KB
  • 大小: 5.2 KB
分享到:
评论

相关推荐

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲...索引的失效与优化36讲什么时候需要分表分库37讲电商系统表设计优化案例分析39讲答疑课堂:MySQL中InnoDB的知识点串讲加餐讲推荐几款常用的性能测试工具

    UML和模式应用(原书第3版).pdf

    6.2 定义:参与者、场景和用例 6.3 用例和用例模型 6.4 动机:为什么使用用例 6.5 定义:用例是功能性需求吗 6.6 定义:参与者的三种类型 6.7 表示法:用例的三种常用形式 6.8 示例:详述风格的处理销售 6.9...

    性能测试进阶指南——LoadRunner11实战 part2

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    人工智能办公室设计优秀案例.docx

    同时,不同层级人员可以利用自助数据可视化分析技术快速构建契合业务场景的数据应用,实现生产实时监控、OMO运营在线分析、设备故障预警、资金管理分析、端到端效能分析等不同业务模块的数据应用需求,切实提高工作...

    性能测试进阶指南——LoadRunner11实战 part1

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    HBase企业应用开发实战

    理论维度,则深入分析了HBase、框架设计、模式设计和基本原理。可谓是理论与实践完美结合,深度与广度兼备!, 【名家推荐】, 本书作者在Hadoop开发和运维领域工作近4年,积累了丰富的经验,同时也对Hadoop技术人员在...

    UML基础、案例与应用(第三版)].施穆勒.扫描版_2分.pdf

    22.5 使用设计模式的好处 260 22.6 小结 260 22.7 常见问题解答 261 22.8 小测验和习题 261 22.8.1 小测验 261 22.8.2 习题 261 第三部分 高级应用 第23章 嵌入式系统建模 265 23.1 回到餐馆 265 23.2 发明之母 ...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part1

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    Java典型模块

    29.6 知识点扩展——设计模式的基础知识 29.6.1 工厂设计模式 29.6.2 代理设计模式 29.7 小结 第30章 中国象棋游戏(GUI+游戏规则算法) 30.1 象棋游戏原理 30.1.1 象棋游戏的基本规则 30.1.2 项目结构框架分析 30.1...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part2

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part5

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part4

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part6

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part3

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    计算机专业毕业设计-微信小程序案例-ssm微信小程序的付费自习室系统-毕设源码+说明文档.rar

    这是一个关于计算机专业毕业设计的微信小程序案例——SSM(Spring、SpringMVC、MyBatis)微信小程序付费自习室系统。该系统旨在提供一个便捷、高效的自习室预约平台,以满足用户的学习需求。 一、系统特点: 1. ...

    《iOS6开发指南》精彩书摘

    第20章“重构MyNotes应用——iOS网络通信中的设计模式与架构设计”。通过对MyNotes应用重构,把MyNotes应用的数据由原来的本地存储变成云存储。在这个过程中我们介绍了移动网络通讯应用的分层架构设计必要性和重要性...

    性能测试进阶指南——LoadRunner11实战 part3

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

Global site tag (gtag.js) - Google Analytics