1.介绍
一种使用频率非常高的模式,标准订阅-发布系统,这个模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得他们的依赖性更小,甚至毫无联系。
2.定义
定义对象之间一对多的关系,使得每当一个对象改变,则所有它依赖的对象都得到通知并自动更新。
3.使用场景
关联行为场景,需要注意的时,关联行为是可拆分的,而不是组合关系;
事件多极出发场景;
跨系统的信息交换,消息队列,事件总线的处理机制;
4.简单实现
public class Coder implements Observer{
public String name;
public Coder(String name)
{
this.name=name
}
@override
public void update(Observable o,Object arg){
system.out.println("Hi"+name+"内容更新了"+arg);
}
@override
public void tostring()
{
retunr "码农:"+name
}
}
public class DevTechFrontier extends Observable{
public void postNewPublication(String content){
setChanged();
notifyObservers(content);
}
}
public class Test{
public static void main(string [] args){
DevTechFrontier dev=new DevTechFrontier();
Coder coder1=new Coder("coder-1");
Coder coder2=new Coder("coder-2");
Coder coder3=new Coder("coder-3");
dev.addObserver(coder1);
dev.addObserver(coder2);
dev.addObserver(coder3);
dev.postNewPublication("发布了");
}
}
Observer和Observable是JDK中内置类型,可见观察者模式的重要。Coder作为观察者,DevTechFrontier作为被观察者,两者之间完全没有耦合,保证了订阅系统的灵活性扩展性。在我看来,正是因为观察者的内置存在,导致我们使用起来只需要实现具体的观察者和被观察者,然后在需要使用的地方调用被观察者的addObserver将观察者加入,最后需要改变的时候调用被观察者的postNewPublication方法即可。
5.实战
6.总结