观察者模式定义了一个一对多的依赖关系。让一个或多个观察者可以监视某一对象,当该对象的状态发生变化时,就可以通知所有的观察者,观察者执行响应的动作。
在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
近期评论