• 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

  • 相关阅读:
    【译】第26节---配置一对多关系
    【译】第25节---配置一对一关系
    【译】第24节---Fluent API
    pycharm 更改创建文件默认路径和修改字体大小
    软件工程----自我介绍
    课堂作业---读取文件实现求数组中所有子数组和的最大值
    实现数组中连续子数组值和最大
    android-----实现不两个不同的activity的跳转和数据传递
    android------解决editText只输入一行和textView不显示过多的内容
    android-------实现底部导航的模板
  • 原文地址:https://www.cnblogs.com/fan-yuan/p/7988931.html
Copyright © 2020-2023  润新知