概述
观察者模式定义了对象之间一对多依赖,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。
设计原则
为交互对象之间的松耦合设计而努力。尽力做到交互对象之间不直接产生联系和作用。
简要说明
观察者模式中主题(subject)与观察者(observer)之间的关系是当主题中观察者关心的部分发生变化时,要及时通知观察者,以便观察者能够及时作出反应。观察者会是不同的对象,因此我们在开发时不能因为观察者不同造成我们代码的修改。同时设计时要充分考虑到设计原则。
关系图
使用场景
多个不同的类都关心某一个类的相关属性,当这一个类的属性发生变化的时候,需要主动的告知这些关注它的属性的多个不同类。
举例说明
现在页面上具有多个不同类型的统计图,关于网站注册用户男女比例的显示。
public interface IWebSite{
void addGraph(IGraph g);
void remove Graph(IGraph g);
void informAll();
}
public class WebSite implements IWebSite{
private static int men = 0;
private static int women = 0;
private List<IGraph> list;
@Override
public void informAll(){
for(IGraph g : list){
g.update();
}
}
}
public interface IGraph{
void update();
}
public class Graph_01 implements IGraph{
@Override
public void update(){
.......
}
}
......
代码说明:主题监管多个实现了同一个接口的不同类,从而实现了主题与观察者没有直接的关联,实现了松耦合。