JAVA 观察者模式

    实现观察者模式涉及到一个类和一个接口--Observable类和Observer接口;

   

    被观察的类需要继承Observable类,在该类中的常用方法有:

    public void addObserver(Observer o);增加一个观察者观察自己;

    public void deleteObserver(Observer o);删除一个已有的观察者;

    public void notifyObservers(Object arg);唤醒所有观察者,通知他们已经发生了更新,这时候会调用观察者的update()方法,并传入参数 arg;

    protected void setChanged();设置状态改变的具体内容;

   

    观察者类需要实现Observer接口,该接口中有一个方法:

    void update(Observable o,Object arg);当被观察对象调用notifyObservers()方法时,自动调用该方法通知观察者;

 

    例子:一个市场,多个观察者;

    class Market extends Observable{
 private String name = "";
 private int value = 0;
 public Market(String name,int value){
  this.name = name;
  this.value = value;
 }
 public void change(String name,int nvalue){
  this.name = name;
  this.value = nvalue;
  super.setChanged();//调用父级函数,改变被观察对象的状态点
  super.notifyObservers(nvalue);//通知观察者,被观察对象发生改变;
                                //其中可传入单个参数,也可不传,在接收出直接用对象处理
 }
 public String toString(){
     return "The name is "+name+" and value is "+value;
 }
}
class Investor implements Observer{
 private String name="";
 public Investor(String name){
     this.name = name;
 }
 //更新观察者对象,接收被观察对象,可处理其一切状态
 public void update(Observable o,Object arg){
     if(o instanceof Market){
      System.out.println("observer "+name+": "+o);
  }
 }
}

其中,为了使得被观察的改变被观察者察觉,setChanged()与notifyObservers()这两个函数缺一不可;

定义完后,可以直接使用:

 public static void main(String args[]){
     Market ma = new Market("A",55);
  Investor in1 = new Investor("wang");
  Investor in2 = new Investor("zhang");
  Investor in3 = new Investor("li");
  ma.addObserver(in1);
  ma.addObserver(in2);
  ma.addObserver(in3);
  System.out.println(ma);
  ma.change("B",65);
 }       

结果如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值