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

来源:互联网 发布:mysql连接工具 编辑:程序博客网 时间:2024/05/21 14:51

观察者模式定义:


如果想实现观察者模式,则必须依靠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 stubHouse 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类也是可以实现的,但是比较复杂。

原创粉丝点击