观察者模式主要可以理解分为两部分,一个是观察者,一个是被观察者。你一定觉得这个回答很弱智,但是设计模式就是这么弱智的一些东西的组合。
言归正传
为了扩展性一般会对观察者 和 被观察者进行接口的抽象 类的抽象
从而分成 有抽象观察者 抽象被观察者 真正的观察者 真正的被观察者
请看第一个抽象被观察者:
//被观察者 接口 public interface Watched { public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyWatcher(String str); }
上面的被观察者主要具备三个功能:1.添加观察者 2. 移除观察者 3.告诉观察者更新
第二个 :抽象观察者
//观察者 接口 public interface Watcher { public void update(String str); }
抽象观察者目前就一个功能, 更新数据。在收到被观察者的更新消息后做相应的数据更新
第三个:真正干活的被观察者 ,即可以实例化的 被观察者
//被观察者的实例 public class WatchedImpl implements Watched { private List<Watcher> list = new LinkedList<Watcher>(); public void addWatcher(Watcher watcher) { list.add(watcher); } public void removeWatcher(Watcher watcher) { list.remove(watcher); } public void notifyWatcher(String str) { if(list.size()==0 || list==null)return; for(Watcher watcher : list){ watcher.update(str); } } }
描述:主要实现抽象接口中的 添加 移除 更新 观察者的功能。 实现原理就是在类内部用集合缓存一个 观察者对象的引用
第四个:这正干活的观察者
public class WatcherImpl implements Watcher { private String name; public WatcherImpl(String name){ this.name = name; } public void update(String str) { System.out.println(str+" "+this.name); } }
main 方法进行测试:
public class MainTest { public static void main(String[] args) { Watched girl = new WatchedImpl(); Watcher watcher1 = new WatcherImpl("watcher1"); Watcher watcher2 = new WatcherImpl("watcher2"); Watcher watcher3 = new WatcherImpl("watcher3"); girl.addWatcher(watcher1); girl.addWatcher(watcher2); girl.addWatcher(watcher3); girl.notifyWatcher("hello"); girl.removeWatcher(watcher2); girl.notifyWatcher("world"); } }
输出结果演示:
======================================
欢迎提问 交流。
原文:http://www.cnblogs.com/weiguannan/p/4456097.html