observable java_java中观察者模式Observable和Observer

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

观察者设计模式

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

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

0524caf7810c2654810ce073749c2ecc.png

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

具体实现如下

房价的实现

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

购房者实现

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行

48304ba5e6f9fe08f3fa1abda7d326ab.png

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);

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果为:

当前房价为:10000.0

购物者C观察到房价已调整为:6000.0

购物者B观察到房价已调整为:6000.0

购物者A观察到房价已调整为:6000.0

购物者C观察到房价已调整为:8000.0

购物者B观察到房价已调整为:8000.0

购物者A观察到房价已调整为:8000.0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值