java实现观察者模式

    xiaoxiao2021-11-29  23

    一、Java.util包中实现观察者的类和接口

    java.util.Observable抽象类,实现了大部分目标类需要的功能。java.util/Observer接口,定义了update()方法,是观察者的接口

    二、 Java实现与自己实现观察者模式的好处

    不需要再定义观察者和目标的接口了,JDK中已经定义了;具体的目标实现里面不需要再维护观察者的注册信息了,这个在Java中的Observable类里面已经帮忙实现好了;触发通知的方式有一点变化,要先调用setChanged方法,这个是Java为了帮助实现更精确的触发控制而提供的功能;具体观察者的实现里面,update方法其实能同时支持推模型和拉模型,这个是Java在定义的时候,就已经考虑进去了。

    三、 具体实例

    被观察目标类继承java.util.Observable

    使用java的Observer模式时,在通知之前一定要调用this.setChanged()方法。

    然后主动调用通知方法 推模式方法:this.notifyObservers(Object obj);将被观察目标的被观察的属性传递给观察者。 拉模式方法:this.notifyObservers();将被观察目标的对象传递给观察者。

    观察者类实现java.util.Observer接口,并复写其中的update方法。

    使用时需要添加观察者

    Observable obj = new subObser();//继承Observable的子类 subObser.addObserver(observerImpl);//加入实现了Observer接口的观察者实现类

    四、观察者的优缺点

    优点:

    观察者模式实现了观察者和目标之间的抽象耦合;观察者模式实现了动态联动;观察者模式支持广播通信;

    缺点:可能会引起无谓的操作

    建议在以下情况中选用观察者模式

    第一 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化;第二 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变。第三 当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的。
    转载请注明原文地址: https://ju.6miu.com/read-678793.html

    最新回复(0)