1. 程式人生 > >設計模式之觀察者模式詳解

設計模式之觀察者模式詳解

http 通知 stat 發布-訂閱 () class arraylist nag .cn

觀察者模式又稱為發布-訂閱模式,涉及的角色有:

  ●  抽象主題

  ●  具體主題

  ●  抽象觀察者

  ●  具體觀察者

案例演示:公司發放工資的時候通知所有觀察者工資已發放。

/**
 * 抽象觀察者
 */
public interface IWatcher {
    
    public void getNotice(String str);
}
/**
 * 抽象主題:工資接口
 */
public interface ISalary {
    
    public void addWatcher(IWatcher watcher);
    
    public void
removeWatcher(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 implements
IWatcher { @Override public void getNotice(String str) { System.out.println("經理" + str); } }
/**
 * 具體主題:工資
 */
public class Salary implements ISalary {

    //存放觀察者:員工
    private List<IWatcher> watcherList = new ArrayList<IWatcher>();
    
    @Override
    
public 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("發工資了!");
    }
}

測試結果如下:

技術分享

設計模式之觀察者模式詳解