这本书本身用叙事的角度来讲,阅读体验已经很好了,这里记录一些心得体会

观察者模式

当对象存在一对多的依赖且一个对象发生改变其它对象需要感知到,那么观察者模式非常适合

观察者模式中的角色术语

主题

主题可以提供数据信息
可以提供多种能力:让观察者订阅,观察者取消订阅,数据推送给观察者

观察者

消费主题中的数据信息,一般来说它接收到主题的数据后,会对旧数据进行update操作,它和主题之间的关系,如图:
image.png

上述中的主题例如微信中的各种订阅号,而观察者则是每一个微信用户,微信用户可以关注/订阅公众号,可以取关,而公众号可以推送消息给用户

观察者模式特点

  • 观察者模式定义了对象之间一对多的关系

装饰者模式

动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 也就是说,可以为类动态扩展能力,例如Java中的IO流类。

例如:游戏中的一个角色,用装饰者模式给他包一个快速移动的能力,包一个会飞的能力,包一个拉屎的能力…

俄罗斯套娃模式 更容易理解它的功能。

image.png

引子

星巴克订单系统有这么个代码:
image.png

它们家有很多口味,所以就有了以下代码(类爆炸了💥💥💥):
image.png

装饰者模式中的角色术语

被装饰者对象基类

定义对象的接口,文中的 Beverage

具体被装饰对象

定义具体的对象,文中的具体饮料名称,例如:DarkRoast

装饰者抽象类

定义与抽象组件一致的接口,文中的:CondimentDecorator

具体装饰者

具体的装饰对象,给要装饰的对象添加职责能力,文中的:Mocha

image.png

装饰者模式的特点

  • 装饰者模式也会用到继承,但是它继承是为了获得共同的类型,而不是获得父类的行为
  • 导致类太多了(一直没能理解Java IO中的那些类)
  • 可以用装饰者动态的为一个组件进行扩展能力
  1. <br />
  2. <br />