观察者模式
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