java中观察者模式

1.观察者定义:有A,B,C,D四个独立的对象,B,C,D对象希望第一时间知道A对象内部的数据发生变化,以便做出相应的措施。

注:有多个观察者多个被观察者。

观察者与被观察者也不是对立的,一个对象可以观察其他对象,也可以被其他对象观察。

2.使用场景:有一家报社提供了一个app,可以供用户订阅报纸。用户可以通过订阅申请进行订阅,此后每当报社那边报纸信息有更新时就会收到新报纸的推送信息然后根据报纸的信息做相应的工作。当用户觉得该报纸不适合自己时可以进行退订,此后将不再收到报社的推送信息。

3.观察者模式在java中的使用:
     java提供了两个类来表示观察者(Observer---interface)和被观察者(Observable---class)。
    被观察者:首先我们需要继承Observable并设置所需要更新的值:
import java.util.Observable;   
public class DataObservable extends Observable{

  private String data ;     
  public void setData(String data){         
    this .data = data ;
    setChanged();
    notifyObservers();
  }
  public String getData() {
        return data ;
  }
}
  观察者们:需要实现Observer并重写update方法,同时需要在构造器中传入被观察者对象以便当观察者实例化时注册到被观察者上。
     
import java.util.Observable;
import java.util.Observer;
public class CatObserver implements Observer{

     public CatObserver(Observable o){
          o.addObserver( this);
      }
     @Override
     public void update(Observable o, Object arg) {
          DataObservable dataObservable = (DataObservable)o;
          String data = dataObservable.getData();
          System. out.println("cat" +"===========" +data);
     }

}

import java.util.Observable;
import java.util.Observer;
public class DogObserver implements Observer{

      public DogObserver (Observable o){
          o.addObserver( this );
      }
      @Override
      public void update(Observable o, Object arg) {
          DataObservable dataObservable = (DataObservable)o;
          String data = dataObservable.getData();
          System. out .println("dog" +"===========" +data);
     }

}
   然后我们来书写测试类:
public static void main(String[] args) throws InterruptedException {
          DataObservable data = new DataObservable();
          CatObserver cat = new CatObserver(data);
          DogObserver dog = new DogObserver(data);
          
           for(int i = 0 ; i < 10 ; i ++){
              Thread. sleep(1000);
              data.setData( new Date().toString());
          }
     }

控制台输出结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦田小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值