《Head First 设计模式》 第二、三章 观察者模式、装饰者模式
原则
模式
实践
关联
观察者模式
原则
为交互对象之间的松耦合设计而努力
模式
观察者模式
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会受到通知,并自动更新
Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。
ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。
图及说明来源于:
https://blog.csdn.net/itachi85/article/details/50773358
实践
书中的实例,看了这张图,就能回想起观察者模式的实际应用方式
图片来源于《Head First 设计模式》 第 56 页
关联
哪里用到了观察者模式?
什么是ApplicationContext?
它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。
ApplicationContext则是应用的容器。
Spring把Bean(object)放在容器中,需要用就通过get方法取出来。
ApplicationEvent 是个抽象类,里面只有一个构造函数和一个长整型的timestamp。
ApplicationListener 是一个接口,里面只有一个onApplicationEvent方法。
所以自己的类在实现该接口的时候,要实装该方法。
如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。
其实这就是标准的Oberver设计模式。
来源于:
https://www.cnblogs.com/softidea/p/5716870.html
不错的博客
https://blog.csdn.net/itachi85/article/details/50773358
装饰者模式
原则
对扩展开放,对修改关闭
模式
装饰者模式
动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择
Component:抽象组件,给对象动态的添加职责。
ConcreteComponent:组件具体实现类。
Decorator:抽象装饰者,继承Component,从外类来拓展Component类的功能,但对于Component来说无需知道Decorator的存在。
ConcreteDecorator:装饰者具体实现类。
图及说明来源于:
https://blog.csdn.net/itachi85/article/details/51282647
实践
书中的实例,看了这张图,就能回想起装饰者模式的实际应用方式
图片来源于《Head First 设计模式》 第 92 页
关联
哪里用到了装饰者模式?
Java 中的 java.io 类就是使用了装饰者模式
不错的博客
https://blog.csdn.net/itachi85/article/details/51282647