观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象,当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够各自自动更新!
在观察者模式中,被观察的对象常常也被称为【目标】或【主题】(Subject),依赖的对象被称作观察者(Observer)。
公司的制度让我常常想起此模式。公司只有一个美工,很多项目都需要美工,美工想请假很头痛,因部门经理要美工分别向公司十几个项目经理逐个打电话通知。
还有很多时候可以使用此模式:
比如系统的事件处理方式也是使用此模式,是设计模式的皇后,哈哈。
如果是异构系统现在用得最多的时MQ了,股票。
建立观察者模式,现在对JAVA来说那是一件非常简单的事情了!
第一步:建立Subject (继承Observable)
package cn.yangcai.Subject; import java.util.Observable; public class ArtdesignerSubject extends Observable { public void message(Object arg0) { if(true) {//判断是否触发通知 super.setChanged(); } notifyObservers(arg0); } }
第二步:建立Observer(继承Observer)
package cn.yangcai.Observer; import java.util.Observable; import java.util.Observer; public class YangcaiObserver implements Observer { public void update(Observable arg0, Object arg1) { if(arg1 instanceof String) { System.out.println("美工"+arg0+"告诉项目经理杨彩:"+arg1); } } }
第三步:调用
package cn.yangcai; import cn.yangcai.Observer.YangruiObserver; import cn.yangcai.Observer.YangcaiObserver; import cn.yangcai.Subject.ArtdesignerSubject; public class test { public static void main(String[] args) { //1.建立subject ArtdesignerSubject subject=new ArtdesignerSubject(); //2.建立observer,并添加 YangcaiObserver yangcaiObserver=new YangcaiObserver(); YangruiObserver yangruiObserver=new YangruiObserver(); subject.addObserver(yangcaiObserver);//添加到列表 subject.addObserver(yangruiObserver);//添加到列表 //3.发通知 subject.message("我要休假了!"); subject.message("我休假回来了!"); } }
输出为:
美工cn.yangcai.Subject.ArtdesignerSubject@affc70告诉项目经理杨锐:我要休假了! 美工cn.yangcai.Subject.ArtdesignerSubject@affc70告诉项目经理杨彩:我要休假了! 美工cn.yangcai.Subject.ArtdesignerSubject@affc70告诉项目经理杨锐:我休假回来了! 美工cn.yangcai.Subject.ArtdesignerSubject@affc70告诉项目经理杨彩:我休假回来了!
代码下载:http://download.csdn.net/detail/ycyangcai/4198632