• 25、java中观察者模式Observable和Observer


    如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口

    观察者设计模式

    现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。

    实际上以上的购房者就是观察者,他们所关注的房价就是被观察者

    其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口

    具体实现如下

    房价的实现

     1 class House extends Observable{
     2     private double price;
     3     public House(double price){
     4         this.price=price;
     5     }
     6     public double getPrice(){
     7         return price;
     8     }
     9     public void setPrice(double price){
    10         if(this.price!=price){
    11             this.price=price;
    12             setChanged();  //标注价格已经被更改
    13             this.notifyObservers(price);  //通知观察者数据已被更改
    14         }
    15     }
    16     @Override
    17     public String toString() {
    18         return "当前房价为:"+price;
    19     }
    20 }

    购房者实现

     1 class HousePriceObserver implements Observer{
     2     private String name;
     3     public  HousePriceObserver(String name) {
     4         this.name=name;
     5     }
     6     @Override
     7     public void update(Observable o, Object arg) {
     8         //这里最好判断一下通知是否来自于房价,有可能来自其它地方
     9         if(o instanceof House){
    10             System.out.println("购物者"+name+ "观察到房价已调整为:"+arg);
    11         }
    12     }
    13 }

    运行

     1 House house=new House(10000);
     2 HousePriceObserver A=new HousePriceObserver("A");
     3 HousePriceObserver B=new HousePriceObserver("B");
     4 HousePriceObserver C=new HousePriceObserver("C");
     5 house.addObserver(A);
     6 house.addObserver(B);
     7 house.addObserver(C);
     8 System.out.println(house);
     9 house.setPrice(6000);
    10 house.setPrice(8000);

    运行结果为:

    当前房价为:10000.0
    购物者C观察到房价已调整为:6000.0
    购物者B观察到房价已调整为:6000.0
    购物者A观察到房价已调整为:6000.0
    购物者C观察到房价已调整为:8000.0
    购物者B观察到房价已调整为:8000.0
    购物者A观察到房价已调整为:8000.0

  • 相关阅读:
    试算平衡
    对账服务
    会计科目与账户
    支付系统难点全面梳理剖析:核算对账核心
    支付系统设计——你不可不知的会计核心(转发整理)
    支付系统设计之查漏补缺的一环:差错账处理
    支付清算业务总结
    财务对账系统v1.0立项到结项的整体回顾
    DNS视图及压力测试(四)
    一个快速检测系统CPU负载的小程序
  • 原文地址:https://www.cnblogs.com/caoyc/p/4597774.html
Copyright © 2020-2023  润新知