定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并且被自动更新
观察者模式是关于多个对象想知道一个对象中数据变化情况的一种成熟的模式。观察者中有一个成为主题的对象和观察者的对象。
观察者模式中的推数据与拉数据:
推数据方式是指:具体主题将变化后的数据全部交给具体观察者,即将变化后的
数据传递给具体的观察者用于更新数据的参数。
拉数据方式是指:具体主题不将变化后的数据推送到观察者,而是提供了获得这些数据的方法,具体观察者在得到通知后,可以调用具体主题的方法得到数据,需要观察者自己获取。
拉数据和推数据之间的区别:后者是主题主动将数据塞给观察者,前者是主题提供获得数据的方法而观察者去主动调用这些方法。
多主题单一观察者一般使用拉数据,即观察者主动调用主题提供的方法获得变化的数据。
观察者模式的优点:
具体主题和具体观察者是松耦合关系。因为
他们间的相互依赖的是
接口,不是具体的实现类,所以是松耦合。
观察者满足开闭原则
适合场景:
当一个对象的数据更新时需要通知其他对象,但这个对象不希望和被通知的那些对象形成紧耦合
当一个对象的数据更新时,这个对象需要让其他对象也各自更新自己的数据,但这个对象不知道具体有多少对象需要更新数据。