您的位置:首页 > 编程语言 > Java开发

java设计模式---观察者设计模式

2017-10-29 19:58 351 查看
观察者模式定义:



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

Observer接口:此接口有一个update方法,当观察的事物发生变化就调用此方法。

Obeservable类:

------》addObserver方法:增加一个观察者

------》deleteObserver方法:删除一个观察者

------》setChanged方法:标记观察者状态

------》nitifyObservers方法:通知观察者发生变化。

package 观察者设计模式;

import java.util.Observable;
import java.util.Observer;

public class Demo1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
House h = new House(1000000);
HousePriceObserver hpo1 = new HousePriceObserver("购房者A");
HousePriceObserver hpo2 = new HousePriceObserver("购房者B");
HousePriceObserver hpo3 = new HousePriceObserver("购房者C");
h.addObserver(hpo3);
h.addObserver(hpo2);
h.addObserver(hpo1);
System.out.println(h);//输出房子价钱
h.setPrice(222222);
}

}
class House extends Observable {
private float price;

public House(float price) {
this.price = price;
}
public float getPrice() {
return this.price;
}
public void setPrice(float price) {
//每次设置价格的时候,也就是价格变化的时候要通知观察者
this.price = price;
System.out.println("当前的价格变为: " + this.price);
setChanged();
notifyObservers();

}
public String toString(){
return "房子价钱为:" + this.price;
}
}
class HousePriceObserver implements Observer{
private String name;

public HousePriceObserver(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void update(Observable o, Object arg) {

House h = (House) o ;
System.out.print(this.name + "观察到价格更改为:");
System.out.println(h.getPrice());
}

}


总结:

在Observer接口中的update方法里面的两个参数:

o:具体表示发出通知的Observable类的对象。即表示哪个被观察者发出了通知。

arg:需要被观察的内容。

被观察者即可被观察的对象 就是继承于Observable的类。其中发送通知时一定调用super.setChanged()方法和notifyObservers(XXX)方法。

此设计模式是Java本身的机制,不使用Observer接口和Observable类也是可以实现的,但是比较复杂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: