观察者模式
要点:
- 观察者模式定义了对象之间一对多的关系。
- 主题(subject,可观察者)用一个共同的接口来实现observer(观察者)。
- 主题subject和观察者observer之间用松耦合方式结合,subject不知道observer的细节,只知道观察者实现了观察者接口。
- 使用观察者模式时,你可以被观察者推(push)或拉(pull)数据。
- 有多个观察者时,不可以依赖特定的通知次序。
- Java有多种观察者模式的实现,包括了通用的java.util.Observer。
- 要注意java.util.Observer所带来的一些问题。(可观察者是一个类,Observable是一个类)
- 如果有必要的话,可以实现自己的observer。
- 观察者模式广泛应用于:JavaBeans, RMI等。
观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情况,其实是由目标将情况发送到观察者的。
观察者模式多用于实现订阅功能的场景,例如微博的订阅,当我们订阅了某个人的微博账号,当这个人发布了新的消息,就会通知我们。
关键点:
1、针对观察者与被观察者分别定义接口,有利于分别进行扩展。
2、重点就在被观察者的实现中:
(1)定义观察者集合,并定义针对集合的添加、删除操作,用于增加、删除订阅者(观察者)
(2)定义通知方法,用于将新情况通知给观察者用户(订阅者用户)
3、观察者中需要有个接收被观察者通知的方法。
工厂模式
根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。