这本书本身用叙事的角度来讲,阅读体验已经很好了,这里记录一些心得体会
观察者模式
当对象存在一对多的依赖且一个对象发生改变其它对象需要感知到,那么观察者模式非常适合
观察者模式中的角色术语
主题
主题可以提供数据信息
可以提供多种能力:让观察者订阅,观察者取消订阅,数据推送给观察者
观察者
消费主题中的数据信息,一般来说它接收到主题的数据后,会对旧数据进行update操作,它和主题之间的关系,如图:
上述中的主题例如微信中的各种订阅号,而观察者则是每一个微信用户,微信用户可以关注/订阅公众号,可以取关,而公众号可以推送消息给用户
观察者模式特点
- 观察者模式定义了对象之间一对多的关系
装饰者模式
动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 也就是说,可以为类动态扩展能力,例如Java中的IO流类。
例如:游戏中的一个角色,用装饰者模式给他包一个快速移动的能力,包一个会飞的能力,包一个拉屎的能力…
叫 俄罗斯套娃模式 更容易理解它的功能。
引子
星巴克订单系统有这么个代码:
它们家有很多口味,所以就有了以下代码(类爆炸了💥💥💥):
装饰者模式中的角色术语
被装饰者对象基类
定义对象的接口,文中的 Beverage
具体被装饰对象
定义具体的对象,文中的具体饮料名称,例如:DarkRoast
装饰者抽象类
定义与抽象组件一致的接口,文中的:CondimentDecorator
具体装饰者
具体的装饰对象,给要装饰的对象添加职责能力,文中的:Mocha
装饰者模式的特点
- 装饰者模式也会用到继承,但是它继承是为了获得共同的类型,而不是获得父类的行为
- 导致类太多了(一直没能理解Java IO中的那些类)
- 可以用装饰者动态的为一个组件进行扩展能力
<br />
<br />