java实现观察者模式

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

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

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

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

三、 具体实例

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

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

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

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

  5. 使用时需要添加观察者

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

四、观察者的优缺点

  • 优点:

    1. 观察者模式实现了观察者和目标之间的抽象耦合;
    2. 观察者模式实现了动态联动;
    3. 观察者模式支持广播通信;
  • 缺点:可能会引起无谓的操作

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

    • 第一 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化;
    • 第二 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变。
    • 第三 当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值