观察者模式

观察者模式是定义对象之间的一种一对多的依赖关系,使得每当一个对象改变状态时,所有依赖于它的对象都会得到通知并得到更新。

就我理解,比如你妈喊你回家吃饭,在这个场景当中老妈是一个通知者,孩子是观察者,通知者(老妈)和观察者(孩子)是一对多

的关系。当饭点到了,老妈就开始给孩子发送通知,叫他们回家吃饭。

具体的类图关系如下所示:

image

 

观察者接口

public interface ObserverI {
	
	public void update();

}

观察者实现类

public class ObserverImpl implements ObserverI{

	private String tag;
	
	public ObserverImpl(String tag){
		this.tag=tag;
	}
	
	@Override
	public void update() {
		System.out.println(tag+"收到通知了");
	}

}

 

通知者接口

public interface SubjectI {
	
	public void attach(ObserverI ob);//增加观察者
	
	public void detach(ObserverI ob);//减少观察者
	
	public void notifyObserver();//通知观察者

}

通知者实现类

public class SubjectImpl implements SubjectI{
	
	private List<ObserverI> ObList=new ArrayList<ObserverI>();

	@Override
	public void attach(ObserverI ob) {
		ObList.add(ob);	
	}

	@Override
	public void detach(ObserverI ob) {
		ObList.remove(ob);
	}

	@Override
	public void notifyObserver() {
		for(ObserverI ob:ObList){
			ob.update();
		}
	}

}

发通知

public static void main(String args[]){
		ObserverI ob1=new ObserverImpl("孩子1");
		ObserverI ob2=new ObserverImpl("孩子2");
		ObserverI ob3=new ObserverImpl("孩子3");
		
		SubjectI subject=new SubjectImpl();
		subject.attach(ob1);
		subject.attach(ob2);
		subject.attach(ob3);
		//你妈喊你回家吃饭
		subject.notifyObserver();
	}

执行结果为

image

 

代码地址:https://git.oschina.net/huangbei1990/DesignPatterns.git

posted @ 2016-09-02 15:05  黄大仙爱编程  阅读(103)  评论(0编辑  收藏  举报