以公司小邮局为例,假设公司的礼品福利都是通过小邮局发放,当福利到的时候,小邮局通知所有的注册员工前来领取
小邮局是被观察者,员工是观察者
观察者的接口:
package com.netboy.observer.demo;
/**
* @功能: 观察者的统一接口
* @版本号:
* @作者: netboy Email:wang_lin_n@163.com
* @时间: 2013-4-8 下午11:08:09
* @例子:
*/
public interface Observer {
public void update(String context);
}
被观察者接口:
package com.netboy.observer.demo;
/**
* @功能: 被观察者的接口
* @版本号:
* @作者: netboy Email:wang_lin_n@163.com
* @时间: 2013-4-8 下午11:06:54
* @例子:
*/
public interface Observered {
//添加一个观察者
public void addObserver(Observer observer);
//删除一个观察者
public void delObserver(Observer observer);
//通知所有的观察者
public void notifyAll(String context);
}
被观察者类--小邮局:
package com.netboy.observer.demo;
import java.util.ArrayList;
import java.util.List;
/**
* @功能: 当有邮件到来时,通知所有的观察者来邮局取快递
* @版本号:
* @作者: netboy Email:wang_lin_n@163.com
* @时间: 2013-4-8 下午11:15:00
* @例子:
*/
public class XiaoYouJu implements Observered {
private List<Observer> obsList = new ArrayList<Observer>();
private boolean hasPost = false;
@Override
public void addObserver(Observer observer) {
obsList.add(observer);
}
@Override
public void delObserver(Observer observer) {
obsList.remove(observer);
}
@Override
public void notifyAll(String context) {
if(obsList.size() <= 0 ) {
System.out.println("sorry ,there is not any observer");
return;
}
for(Observer observer : obsList) {
observer.update(context);
}
}
public void getPost() {
if(hasPost) {
String context = "hi,there is your package";
this.notifyAll(context);
}
}
public void setHasPost(boolean hasPost) {
this.hasPost = hasPost;
}
}
观察者--员工类
package com.netboy.observer.demo;
/**
* @功能:
* @版本号:
* @作者: netboy Email:wang_lin_n@163.com
* @时间: 2013-4-8 下午11:28:55
* @例子:
*/
public class Staff implements Observer {
@Override
public void update(String context) {
System.out.println("Thank you ,i will go");
}
}
将程序运行起来:
package com.netboy.observer.demo;
/**
* @功能: 以公司小邮局为例,说明观察者模式,公司通过小邮局发送礼品福利,福利到时通知所有注册的员工前来领取
*
* @版本号:
* @作者: netboy Email:wang_lin_n@163.com
* @时间: 2013-4-8 下午11:00:54
* @例子:
*/
public class Client {
public static void main(String[] args) {
System.out.println("hello,Observer Pattern Demo");
//创建一个被观察者
XiaoYouJu xiaoYouJu = new XiaoYouJu();
//创建观察者
Staff aa = new Staff();
Staff bb = new Staff();
Staff cc = new Staff();
//注册观察者
xiaoYouJu.addObserver(aa);
xiaoYouJu.addObserver(bb);
xiaoYouJu.addObserver(cc);
//邮件到了
xiaoYouJu.setHasPost(true);
//被观察者做些事情
xiaoYouJu.getPost();
}
}
其实在jdk中已经有观察者与被观察者的基础接口Observer和类Observable。