设计模式笔记--观察者模式

  以公司小邮局为例,假设公司的礼品福利都是通过小邮局发放,当福利到的时候,小邮局通知所有的注册员工前来领取

小邮局是被观察者,员工是观察者


观察者的接口:

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。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值