1.3:装饰对象:装饰者模式

1:开放-关闭原则



2:装饰者模式,一个完美实现“开放-封闭原则”的设计模式。

记住这么一句话:装饰者类反应出被装饰的组件类型。(事实上,他们具有相同的类型,都经过接口或继承实现)

3:认识装饰者模式



4:比较典型的例子“星巴克饮料”

重点理解下面几句话:

(1)装饰者和被装饰者拥有共同的类型(可以通过继承实现,也可以通过接口实现),这样装饰者才能够拥有替代被装饰者的能力。

(2)被装饰者的行为,来自于装饰者和基础组件,或者与其他装饰者之间的组合关系。

(3)通常装饰者模式是采用抽象类的,但是在Java中可以使用接口。所以具体写代码时,可以自己考虑。

(4)看到下面的星巴克咖啡图了吗?想想怎么写代码?


(5)咖啡种类:Beverage(饮料)

综合:HouseBlend

深焙:DarkRoast

低咖啡因:Decaf

浓缩:Espresso

(6)配料种类:Condiment Decorator(调味品装饰)

牛奶:Milk

摩卡:Mocha

豆浆:Soy

奶泡:Whip

(7)星巴克咖啡类图



5:真实世界的装饰者,java中I/O


上图中可以看到:FilterInputStream是所有InputStream的抽象装饰者,InputStream是被装饰者的公共抽象组件。

(1)InputStream


(2)FilterInputStream


(3)jdk中IO包类图


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,051评论 4 67
  • 最近在学习MyBatis框架原理的时候,发现其实现二级缓存的过程中运用到了装饰者模式,所以来深入了解一下 介绍 装...
    就没一个昵称能用阅读 729评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • 本篇文章介绍一种设计模式——装饰者模式。装饰者模式在Java中的典型应用就是IO流,在本篇文章中将有详细介绍。本篇...
    Ruheng阅读 22,300评论 13 56
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139