标签:
观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。----WIKIPEDIA
观察者模式,就是使得被观察者中持有观察者的对象实例,在发生某些事件的时候,通过notify“通知”观察者,完成相应的操作,他也叫作发布-订阅模式,定义对象间一对多的依赖关系,使得被观察者对象产生动作,即可通知其依赖的对象该被观察者发生了变更。
正好前几天买了两只巴西龟,以这个为例子,乌龟也时会饿的,他饿了我就要去喂它吃的,这样的话,可以说正好用的到观察者模式。
public interface Observable { // 添加观察者 public void addObserver(Observer observer); // 删除观察者 public void removeObserver(Observer observer); // 通知观察者 public void notifyObservers(String info); }
public interface Observer { // 喂食 public void feed(String info); }
public class Turtle implements Observable{ private List<Observer> observerList = new ArrayList<Observer>(); public void hungry(){ this.notifyObservers("我饿了!"); } @Override public void addObserver(Observer observer) { observerList.add(observer); } @Override public void removeObserver(Observer observer) { if(observerList != null && observerList.contains(observer)){ observerList.remove(observer); } } @Override public void notifyObservers(String info) { for (Observer observer : observerList) { observer.feed(info); } } }
public class XX implements Observer { @Override public void feed(String info) { System.out.println("喂饲料!"); } }
主要的变更如下:
public class Turtle2 implements Observable2 { private List<Observer2> observerList = new ArrayList<Observer2>(); public void hungry(){ this.notifyObservers(); } @Override public void addObserver(Observer2 observer) { observerList.add(observer); } @Override public void removeObserver(Observer2 observer) { if(observerList != null && observerList.contains(observer)){ observerList.remove(observer); } } @Override public void notifyObservers() { for (Observer2 observer : observerList) { observer.feed(this); } } @Override public boolean isNeedFeed() { return true; } }
1. 观察者与被观察者之间是抽象耦合:扩展被观察者和观察者时较容易。
2. 建立一套触发机制,经过一系列的触发机制,形成触发链。
多级触发的时候,效率让人担忧,在设计的时候要充分的考虑这一点。
1. 关联行为场景。
2. 事件的多级触发。
3. 跨系统的消息交换场景,消息队列的处理机制。
"围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)
"围观"设计模式(16)--结构型之组合模式(Composite Pattern)
"围观"设计模式(19)--行为型之观察者模式(Observer Pattern)
标签:
原文地址:http://blog.csdn.net/wangyang1354/article/details/51614305