包含java8实现观察者模式的词条
本篇文章给大家谈谈java8实现观察者模式,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
观察者模式解析
定义 :对象间的一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于他的对象都会得到通知,并自动更新。
交互对象之间松耦合
1)观察者定义了对象之间一对多的关系
2)被观察者用一个共同的接口来更新观察者
3)观察者和被观察者用松耦合方式结合,被观察者不知道观察者的细节,只知道观察者实现了观察者接口
优点:
1)观察者与被观察者抽象耦合,容易扩展;
2)建立了一套触发机制。
缺点:
1)循环依赖会导致系统崩溃;
2)观察者太多会浪费时间。
1)定义对象之间的一对多依赖关系而不使对象紧密耦合。
2)确保当一个对象改变状态时,自动更新开放数量的从属对象。
3)一个对象应该可以通知开放式数量的其他对象。
观察者模式 vs 发布-订阅模式
观察者模式(Observer)
如何使用 Java8 实现观察者模式?(上)
如何使用 Java8 实现观察者模式?(下)
如何使用Java8实现观察者模式
1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
观察者模式的优点:
1、 Subject和Observer之间是松偶合的,分别可以各自独立改变。
2、 Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
观察者模式(Observer)的推式与拉式
当我们想订一份报纸,我们先去邮局找到报纸的编号后填写订阅单并缴费。当报社有新报纸发出时,邮局会将我们订阅的报纸发给我们。
为了简单我们去掉邮局环节简化成:报社有新报纸后马上通知用户,这就是观察者。
定义对象间的一对多关系,当一个对象的状态发生变化时,所依赖于它的对象都得到通知并主动更新。 在观察者模式中,多个订阅者成为观察者(Observer),被观察的对象成为目标(Subject)。观察者的UML模型如下:
先定义Subject并写一个ConcreteSubject继承Subject:
再定义一个接口Observer,并写一个ConcreteObserver实现Observer接口:
最后看看主函数方法:
打印出来的结果:
在实现观察者模式的时候,一定要注意触发通知的时机。一般情况下是在完成了状态改变之后触发,因为通知会传递数据,比如在 setSubjectState 时先通知观测者就会发生 错误 。
在观察者模式的实现上,有推模式和拉模式两种方式:
当前上面的实现使用的就是拉模型。通过 (ConcreteSubject)subject 得到具体对象,获得信息。
当然Java本身就有观察者模式的部分实现,分别是 java.util.Observable java.util.Observable 。
下面看一个使用Java自带观察者模式的例子:
新的目标直接继承Java中定义的Observerable:
新的观察者也直接实现Observer接口:
主函数和前面的相似:
打印出结果:
使用Java自带的观察者模式需要注意以下几个问题:
java8实现观察者模式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java8实现观察者模式的信息别忘了在本站进行查找喔。