观察者模式的定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
假设现在有一个需求,客户支付了订单款项,这时财务需要开具发票,出纳需要记账,配送员需要配货
观察者接口
package com.zw.mymaven;
//抽象观察者角色
public interface Watcher {
public void update();
}
主题接口
package com.zw.mymaven;
//被观察者必有3个功能,增加,删除,更新
public interface Watched {
public void addWatcher(Watcher watcher);
public void removeWatcher(Watcher watcher);
public void notifyWatchers();
}
观察者实现类
package com.zw.mymaven;
public class Worker implements Watcher {
public void update() {
System.out.println("财务已开具发票,出纳已记账,配送员已配货");
}
}
主题实现类
package com.zw.mymaven;
import java.util.ArrayList;
import java.util.List;
public class Product implements Watched {
private List<Watcher> list = new ArrayList<Watcher>();
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
public void removeWatcher(Watcher watcher) {
list.remove(watcher);
}
public void notifyWatchers() {
for (Watcher watcher : list) {
watcher.update();
}
}
}
测试类
package com.zw.mymaven;
public class Test2 {
public static void main(String[] args) {
Watched product = new Product();
Watcher Caiwu = new Worker();
Watcher Chuna = new Worker();
Watcher Peisong = new Worker();
product.addWatcher(Caiwu);
product.addWatcher(Chuna);
product.addWatcher(Peisong);
product.notifyWatchers();
}
}