Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本站所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用.
虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"商品的变化,以便及时通知订户"这一点,是很多网上商店共有的模式,这一模式类似Observer patern观察者模式.
具体的说,如果网上商店中商品在名称 价格等方面有变化,如果系统能自动通知会员,将是网上商店区别传统商店的一大特色.这就需要在商品product中加入Observer这样角色,以便product细节发生变化时,Observer能自动观察到这种变化,并能进行及时的update或notify动作.
观察者模式的角色(抽象主题角色,抽象观察者角色,具体主题角色,具体观察者角色)
抽象主题角色
Watched.java
package com.wansha; //被观察者 public interface Watched { public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyWatcher(String str); }
抽象观察者角色
Watcher.java
package com.wansha; //观察者 public interface Watcher { public void update(String str); }
具体主题角色
WatchedImpl.java
package com.wansha; import java.util.LinkedList; import java.util.List; public class WatchedImpl implements Watched { private List<Watcher> list = new LinkedList<Watcher>(); @Override public void addWatcher(Watcher watcher) { list.add(watcher); } @Override public void removeWatcher(Watcher watcher) { list.remove(watcher); } @Override public void notifyWatcher(String str) { if(list.size()==0 || list==null)return; for(Watcher watcher : list){ watcher.update(str); } } }
具体观察者角色
WatcherImpl.java
package com.wansha; public class WatcherImpl implements Watcher { @Override public void update(String str) { System.out.println(str); } }
Test.java
package com.wansha; public class Test { public static void main(String[] args) { Watched girl = new WatchedImpl(); Watcher watcher1 = new WatcherImpl(); Watcher watcher2 = new WatcherImpl(); Watcher watcher3 = new WatcherImpl(); girl.addWatcher(watcher1); girl.addWatcher(watcher2); girl.addWatcher(watcher3); girl.notifyWatcher("hello"); girl.removeWatcher(watcher2); girl.notifyWatcher("world"); } }
hello hello hello world world