设计模式-观察者模式

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

public interface IHanfeizi {
	public void haveBreakFast();
	public void haveFun();
}

被观察者接口

public interface Observable {
	public void addObserver(Observer observer);
	
	public void deleteObserver(Observer observer);
	
	public void notifyObservers(String context);
}

观察者接口

public interface Observer {
	public void observe(String context);
}

被观察者实现类

public class Hanfeizi implements Observable, IHanfeizi {

	private List<Observer> observerList = new ArrayList<>();
	@Override
	public void haveBreakFast() {
		System.out.println("韩非子:开始吃饭了。。。");
		notifyObservers("韩非子在吃饭");
	}

	@Override
	public void haveFun() {
		System.out.println("韩非子:开始娱乐了。。。");
		notifyObservers("韩非子在娱乐");
	}

	@Override
	public void addObserver(Observer observer) {
		observerList.add(observer);
	}

	@Override
	public void deleteObserver(Observer observer) {
		observerList.remove(observer);
	}

	@Override
	public void notifyObservers(String context) {
		for (Observer observer : observerList) {
			observer.observe(context);
		}
	}

}

观察者1

public class Lisi implements Observer {

	@Override
	public void observe(String context) {
		System.out.println("李斯:观察到韩非子活动,想boss汇报。");
		report(context);
		System.out.println("李斯汇报完毕");
	}
	
	public void report(String reportContext) {
		System.out.println("李斯:报告老板,观察到韩非子活动了," + reportContext);
	}

}

观察者2

public class Wangsi implements Observer {

	@Override
	public void observe(String context) {
		System.out.println("王斯:观察到韩非子活动,+" + context);
		cry(context);
		System.out.println("王斯哭完了。");
	}
	
	public void cry(String context) {
		System.out.println("王斯:因为" + context + "所以我伤心。。。");
	}

}

场景类

public class Main {
	public static void main(String[] args) {
		Observer lisi = new Lisi();
		Observer wangsi = new Wangsi();
		Hanfeizi hanfeizi = new Hanfeizi();
		hanfeizi.addObserver(lisi);
		hanfeizi.addObserver(wangsi);
		hanfeizi.haveBreakFast();
		hanfeizi.haveFun();
	}
}

运行结果如下:

韩非子:开始吃饭了。。。
李斯:观察到韩非子活动,想boss汇报。
李斯:报告老板,观察到韩非子活动了,韩非子在吃饭
李斯汇报完毕
王斯:观察到韩非子活动,+韩非子在吃饭
王斯:因为韩非子在吃饭所以我伤心。。。
王斯哭完了。
韩非子:开始娱乐了。。。
李斯:观察到韩非子活动,想boss汇报。
李斯:报告老板,观察到韩非子活动了,韩非子在娱乐
李斯汇报完毕
王斯:观察到韩非子活动,+韩非子在娱乐
王斯:因为韩非子在娱乐所以我伤心。。。
王斯哭完了。
posted @ 2016-10-27 18:10  商商-77  阅读(157)  评论(1编辑  收藏  举报