java中观察者模式Observable和Observer

Posted 求知若渴 虚心若愚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于java中观察者模式Observable和Observer的主要内容,如果未能解决你的问题,请参考以下文章

Java_观察者模式(Observable和Observer) -转

RX

利用Java提供的Observer接口和Observable类实现观察者模式

C++11:参照Java Observable实现观察者模式

[Java]_[初级]_[Observer和Observable失效后如何使用java.beans包下的类来实现观察者模式]

专业吸猫20年!一对一直播源码,Java观察者模式案例简析