阅读背景:

[初级]设计模式--观察者模式

来源:互联网 
/**
 * 模拟 观察者模式
 * 场景:
 * 	小孩睡觉,家长工作
 * 	小孩醒来,家长喂饭
 */
public class ObserverDemo01 {
	public static void main(String[] args) throws InterruptedException {
		MyBaby b = new MyBaby();
		MyParent p1 = new MyParent("爸爸");
		MyParent p2 = new MyParent("妈妈");
		MyParent p3 = new MyParent("姥姥");
		MyParent p4 = new MyParent("奶奶");
		b.addObserver(p1);
		b.addObserver(p2);
		b.addObserver(p3);
		b.addObserver(p4);
		for(int i=0;i<5;i++){
			Thread.sleep(1000);
			if(b.isAwake()){
				b.sleep();
			}else{
				b.wakeUp();
			}
		}
	}
}

/**
 * 监听者
 */
interface IMyObserver{
	void update(MyObservable obs);
}
/**
 * 被监听者
 */
class MyObservable{
	protected List<IMyObserver> list = new ArrayList<IMyObserver>();
	
	public void addObserver(IMyObserver obs){
		list.add(obs);
	}
	public void removeObserver(IMyObserver obs){
		list.add(obs);
	}
	public void notifyAllObservers(){
		for (IMyObserver obs : list) {
			obs.update(this);
		}
	}
}
/**
 * 以下为监听者、被监听者实例
 */
class MyBaby extends MyObservable{
	private boolean isAwake = false;
	public boolean isAwake(){
		return this.isAwake;
	}
	public void wakeUp(){
		System.out.println("baby醒了");
		this.isAwake = true;
		notifyAllObservers();
	}
	public void sleep(){
		System.out.println("baby睡了");
		this.isAwake = false;
		notifyAllObservers();
	}
}
class MyParent implements IMyObserver{
	private String name;
	public MyParent(String name){
		this.name = name;
	}
	@Override
	public void update(MyObservable obs) {
		if( ((MyBaby)obs).isAwake() ){
			System.out.println("["+name+"]来喂饭");
		}else{
			System.out.println("["+name+"]去工作");
		}
	}
}/**
 * 模拟 观察者模式
 * 场景:
 * 	小孩睡觉,家长工作
 * 	小孩



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: