您的位置:首页 > 其它

设计模型之观察者模型(二)

2016-04-21 11:07 239 查看
利用java自带的接口来实现观察者模式
1.目标类的定义:
package com.jxufe.jdk.observer;

import java.util.Observable;
/**
* 这是一个具体的目标对象
* @author jack
* @version 创建时间:2016年4月21日 上午10:42:08
*
*/
public class ConcreteSubject extends Observable {

private String information;//目标对象需要更新的内容

public String getInformation() {
return information;
}

public void setInformation(String information) {
this.information = information;
/**
* 标记此 Observable 对象为已改变的对象;
* 现在 hasChanged 方法将返回 true。
*/
this.setChanged();
/**
* 这个方法是使用推模式实现的,通知其所有观察者
* 并调用 clearChanged 方法来指示此对象不再改变。
*/
this.notifyObservers(information);
/**
* 拉模式是把整个目标对象推送个观察者对象的
* this.notifyObservers();
*/
}

}


2.观察者类的定义:
package com.jxufe.jdk.observer;

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

public class ConcreteObserver implements Observer {

private String observeName;
/**
* 第一个参数是使用拉模型来调用的
* 第二个参数是使用推模型来调用的
*/
public void update(Observable arg0, Object arg1) {
System.out.println("推模型:"+observeName + (String)arg1);
System.out.println("拉模型:"+observeName + ((ConcreteSubject)arg0).getInformation());
}
public String getObserveName() {
return observeName;
}
public void setObserveName(String observeName) {
this.observeName = observeName;
}

}


3.结果:
package com.jxufe.jdk.observer;

import java.util.Observable;

/**
* 用来演示观察者模式
* @author 曾志鹏
* @version 创建时间:2016年4月21日 上午10:56:09
*
*/
public class MainDemo {
public static void main(String[] args) {
Observable concreteSubject1 = new ConcreteSubject();

ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver();
observer1.setObserveName("张三");
observer2.setObserveName("张四");
concreteSubject1.addObserver(observer2);
concreteSubject1.addObserver(observer1);

((ConcreteSubject) concreteSubject1).setInformation("你好");
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: