观察者模式是定义对象之间的一种一对多的依赖关系,使得每当一个对象改变状态时,所有依赖于它的对象都会得到通知并得到更新。
就我理解,比如你妈喊你回家吃饭,在这个场景当中老妈是一个通知者,孩子是观察者,通知者(老妈)和观察者(孩子)是一对多
的关系。当饭点到了,老妈就开始给孩子发送通知,叫他们回家吃饭。
具体的类图关系如下所示:
观察者接口
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();
}
执行结果为
代码地址:https://git.oschina.net/huangbei1990/DesignPatterns.git