观察者模式定义了一个一对多的依赖关系。让一个或多个观察者可以监视某一对象,当该对象的状态发生变化时,就可以通知所有的观察者,观察者执行响应的动作。
在java中,被观察者必须继承Observable类,Observable类常用方法如下:
-
public void addObserver(Observer o) 添加一个观察者
-
public void deleteObserver(Observer 0) 删除一个观察者
-
protected void setChanged() 被观察者设置自己的状态发生了变化
-
public void notifyObservers(Object arg) 通知所有的观察者
每一个观察者都要实现Observer接口,Observer接口中只有一个update方法,
public void update(Observable o, Object arg)
第一个参数表示被观察者实例,第二个参数表示修改的内容。
被观察者代码:
package com.yeetrack.test;
import java.util.Observable;
public class Hourse extends Observable
{
private int price; //自身的属性,代表房子价格
public int getPrice()
{
return price;
}
public void setPrice(int price)
{
this.price = price;
super.setChanged(); //设置自己的状态发生了变化
super.notifyObservers(price);//通知被观察者price发生了变化
}
//构造方法
public Hourse(int price)
{
this.price = price;
}
}
观察者代码:
package com.yeetrack.test;
import java.util.Observable;
import java.util.Observer;
public class HoursePriceObserver implements Observer
{
private String name; //观察者自己的名字
public HoursePriceObserver(String name)
{
// TODO Auto-generated constructor stub
this.name = name;
}
//Observer中的update方法,如果被观察者状态发生变化,就会自动调用此方法
public void update(Observable o, Object arg)
{
// TODO Auto-generated method stub
System.out.println(this.name+" "+arg);
}
}
测试代码:
package com.yeetrack.test;
public class TestObserve
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Hourse hourse = new Hourse(10000);
HoursePriceObserver hpo1 = new HoursePriceObserver("111"); //初始化观察者1
HoursePriceObserver hpo2 = new HoursePriceObserver("222"); //初始化观察者2
hourse.addObserver(hpo1); //为hourse添加一个观察者
hourse.addObserver(hpo2);
hourse.setPrice(40000);//改动hourse的价格,观察者hpo1和hpo2会自动调用update方法。
}
}
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=31
近期评论