介绍
这期内容当中小编将会给大家带来有关怎么在Java项目中实现一个内置观察者模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
主要使用到的Java API就两个类:
观察者接口:观察者对象,监听被观察者对象数据变化,一是数据发生变化,就做出相应地啥响应。
可见类:被观察者对象,提供添加及移出观察者对像方法,数据发生哟完成时并通知所有已经添加进来的观察者对象。
被观察者代码示例:
//可观察到的是被观察者对象接口,实现该接口就是:目标(被观察者)的具体实现 public class  TargetObservable extends Observable  { ,//要观察的数据:消息发生改变时,所有被添加的观察者都能收到通知 ,private String 信息; ,public String  getConent (), { return 才能;信息; ,} ,public void  setMessage (String 消息),{ 时间=this.message 才能;信息;//,才能被观察者数据发生变化时,通过以下两行代码通知所有的观察者 this.setChanged才能(); this.notifyObservers才能(消息); ,} }
2个观察者代码示例:
//观察者对象是观察者,实现观察者的对象就是具体的观察者对象 public class  TargetObserver implements Observer  { ,//定义观察者名称 ,private String 名称; ,public String  getObserverName (), { return 才能,名字; ,} ,public void  setObserverName (String observerName), { 时间=this.name 才能;observerName; ,} ,@Override ,public void 更新(Observable arg0, Object __arg1), {//才能更新消息数据 System.out.println才能(name +,“收到了发生变化的数据内容是:“ ,,,+,((TargetObservable), arg0) .getConent ()); ,} }
public class TargetObserver01 implements Observer { ,//定义观察者名称 ,private String  name01; ,public String  getObserverName (), { return 才能;name01; ,} ,public void  setObserverName (String observerName), { 时间=this.name01 才能;observerName; ,} ,@Override ,public void 更新(Observable arg0, Object __arg1), {//才能更新消息数据 System.out.println才能(name01 +,“收到了发生变化的数据内容是:“ ,,,+,((TargetObservable), arg0) .getConent ()); ,} }
测试代码:
/* * *,才能@description:测试类 *,才能@author ldm *,才能@date 2016 - 11 - 1,上午8:29:07 ,*/,public static  void main (String [], args), {//,才能创建一个具体的被,观察者 TargetObservable 才能;observable =, new TargetObservable ();//,才能创建第一个观察者 TargetObserver 才能;one =, new TargetObserver (); one.setObserverName才能(“我是观察者A");//,才能创建第二个观察者 TargetObserver01 才能;two =, new TargetObserver01 (); two.setObserverName才能(“我是观察者B");//才能,注册观察者 observable.addObserver才能(一); observable.addObserver才能(两个);//才能,目标更新天气情况 observable.setMessage才能(“* * *我要更新的数据* * *“); ,} }
执行结果:
我是观察者B收到了发生变化的数据内容是:——我要更新的数据 我是观察者一个收到了发生变化的数据内容是:——我要更新的数据,
<强>模式优点:强>
一个被观察者可以对应多个观察者,当被观察者发生变化的时候,他可以将消息通知给所有已经添加观察者。基于接口实现为程序提供了更大的灵活性。
但在使用时要注意根据条件及时添加或移除观察者对象,否则可能导致意料外结果。
最后附上观察者和被观察目标的原码,这样我们自己在写的时候就知道如何下手了:
package java.util; import java.util.Observable; public interface  Observer { ,void 更新(Observable var1, Object var2); }
package java.util; import java.util.Observer; import java.util.Vector; public class  Observable { ,private boolean changed =,假; ,private Vector怎么在Java项目中实现一个内置观察者模式