怎么在Java项目中实现一个内置观察者模式

  介绍

这期内容当中小编将会给大家带来有关怎么在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项目中实现一个内置观察者模式