• java中观察者模式Observable和Observer


    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

  • 相关阅读:
    unity c# 获取系统时间
    如果你想让继承MonoBehaviour的类变成Singleten
    关于程序员
    开始养成记录的习惯吧
    关于结构体的赋值问题
    数学中的集合,群,环,域
    励志
    [编程题] 进制均值
    javaEE 入门
    jsp内置对象2
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/6254967.html
Copyright © 2020-2023  润新知