设计模式之-观察者篇

来源:互联网 发布:网络监测系统硬件 编辑:程序博客网 时间:2024/06/16 13:04

设计模式之-观察者篇

大家平时最常用的adapter,其实内部就是使用的观察者模式,其实就是先写一个观察者类实现Observer这个接口,然后实现其中的update()方法,只要改变了observable对象就调用该方法,那么这个observable对象就需要我们去定义他的子类。。。有兴趣的可以去看一下源码,我这里只讲一个关于观察者模式的小例子,如下:

1、以当前的房价来当做举例,我们先定义House继承自observable,
public class House extends Observable {
private float price;
public void setPrice(float price){
this.setChanged();//设置变化点
this.notifyObservers(price);//通知所有观察者价格的变化
this.price = price;
}
public float getPrice() {
return this.price;
}
public House(float price){
this.price = price;
}
@Override
public String toString() {
return “房子价格为:”+this.price;
}
}
其中setChanged()是来改变房子价格的方法,是个触发点
那么notifyObservers(price)就是通知所有的观察者价格已经变化了
那么最为关键的来了,我观察者怎么能知道价格变化了呢?

3、那么就要去把观察者添加到Observer的子类当中,大家可以简单理解成注册,那么我们接下来看一下,当房子价格发生变化时,所有的观察者是怎么知道变化的,如下:
public class ObserDemo {
public static void main(String []args){
House h = new House(1000000);
HousePriceObserver housePriceObserver1 = new HousePriceObserver(“买房者1”);
HousePriceObserver housePriceObserver2 = new HousePriceObserver(“买房者2”);
HousePriceObserver housePriceObserver3 = new HousePriceObserver(“买房者3”);
h.addObserver(housePriceObserver1);//给房子注册观察者
h.addObserver(housePriceObserver2);
h.addObserver(housePriceObserver3);
System.out.println(h);//输出房子价格
//修改房子价格,会出发update(参数1,参数2)方法通知购房者新的房价信息
h.setPrice(2000000);
System.out.println(h);//再次输出房价
}
}

可以打印出来自己去看看。

0 0