設計模式之觀察者模式詳解
阿新 • • 發佈:2017-07-19
http 通知 stat 發布-訂閱 () class arraylist nag .cn
觀察者模式又稱為發布-訂閱模式,涉及的角色有:
● 抽象主題
● 具體主題
● 抽象觀察者
● 具體觀察者
案例演示:公司發放工資的時候通知所有觀察者工資已發放。
/** * 抽象觀察者 */ public interface IWatcher { public void getNotice(String str); }
/** * 抽象主題:工資接口 */ public interface ISalary { public void addWatcher(IWatcher watcher); public voidremoveWatcher(IWatcher watcher); public void notifyAll(String str); }
/** * 具體觀察者:員工 */ public class Emp implements IWatcher { @Override public void getNotice(String str) { System.out.println("員工" + str); } }
/** * 具體觀察者:經理 */ public class Manager implementsIWatcher { @Override public void getNotice(String str) { System.out.println("經理" + str); } }
/** * 具體主題:工資 */ public class Salary implements ISalary { //存放觀察者:員工 private List<IWatcher> watcherList = new ArrayList<IWatcher>(); @Overridepublic void addWatcher(IWatcher watcher) { watcherList.add(watcher); } @Override public void removeWatcher(IWatcher watcher) { watcherList.remove(watcher); } @Override public void notifyAll(String str) { for (IWatcher watcher: watcherList) { watcher.getNotice(str); } } }
/** * 測試類 */ public class Test { public static void main(String[] args) { //工資 ISalary salary = new Salary(); //員工 IWatcher emp = new Emp(); //經理 IWatcher manager = new Manager(); //添加觀察者 salary.addWatcher(emp); salary.addWatcher(manager); salary.notifyAll("發工資了!"); } }
測試結果如下:
設計模式之觀察者模式詳解