标签:code [] style 模式 通知 watch 方法 服务业 ack
单独看UML类图,有没有发现观察者类图和工厂方法模式的类图和相似?不过代码实现可不一样哦
抽象观察者:
package com.sjmx.observer.theory; public interface Watcher { public void update(String str); }
具体观察者:
package com.sjmx.observer.theory; public class ConcreteWatcher implements Watcher { @Override public void update(String str) { if("warning".equals(str)){ System.out.println("检查开始,结束打扫卫生!"); } } }
package com.sjmx.observer.theory; public class ConcreteWatcher2 implements Watcher { @Override public void update(String str) { if("warning".equals(str)){ System.out.println("检查开始,结束室外活动区整理!"); } } }
package com.sjmx.observer.theory; public class ConcreteWatcher3 implements Watcher { @Override public void update(String str) { if("warning".equals(str)){ System.out.println("检查开始,全体安静自习!"); } } }
主题(通知)接口:
package com.sjmx.observer.theory; public interface Watcher { public void update(String str); }
具体通知对象:
package com.sjmx.observer.theory; import java.util.ArrayList; import java.util.List; public class ConcreteWatched implements Watched { // 存放观察者 private List<Watcher> list = new ArrayList<Watcher>(); @Override public void addWatcher(Watcher watcher) { list.add(watcher); } @Override public void removeWatcher(Watcher watcher) { list.remove(watcher); } @Override public void notifyWatchers(String str) { // 自动调用实际上是主题进行调用的 for (Watcher watcher : list) { watcher.update(str); } } }
客户端代码:
package com.sjmx.observer.theory; public class Client { public static void main(String[] args) { Watched girl = new ConcreteWatched(); Watcher watcher1 = new ConcreteWatcher(); Watcher watcher2 = new ConcreteWatcher2(); Watcher watcher3 = new ConcreteWatcher3(); girl.addWatcher(watcher1); girl.addWatcher(watcher2); girl.addWatcher(watcher3); girl.notifyWatchers("warning"); } }
运行结构:
看完代码:
1、观察者模式所做的工作就是接触耦合,让耦合的双方都依赖于抽象,而不依赖于实体。从而使得一方的 变化不会影响另一方。
2、缺点也很容易看见的,所有的实体都要方法相同,这在显示生活中是不可能的。比如,今天放假,学生停课,工人停止生产,股票停止交易,服务业开始服务等等。
《大话设计模式》——读后感 (6)老板回来了,我不知道?——观察者模式之理论实例(1)
标签:code [] style 模式 通知 watch 方法 服务业 ack
原文地址:http://www.cnblogs.com/chen1-kerr/p/7058633.html