观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象,当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够各自自动更新!
在观察者模式中,被观察的对象常常也被称为【目标】或【主题】(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.youkuaiyun.com/detail/ycyangcai/4198632