觀察者模式定義了一個一對多的對象關係:一個主體對象對應多個觀察者對象。當主體對象發生改變時,所有它對應的觀察者對象都會自動得到通知並更新。
本文將給出一個相應的案例具體說明觀察者模式是如果工作的。這個案例示範了一個當一個任務的資訊改變時通知這個任務所涉及所有人員的案例。任務資訊包括任務狀態,任務所採用的處理流程和任務完成後的checklist[用來確保任務完成所有預定需要完成的功能列表和避免一些常見的錯誤]。
先定義兩個介面:主體對象介面和觀察者對象介面。
/** *//**
* 主體對象介面定義了註冊觀察者,取消觀察者和通知觀察者方法。
*
*/
public interface ISubject {
/** *//**
* 為該主體對象註冊一個觀察者。
*/
public void registerObserver(IObserver observer);
/** *//**
* 從該主體對象中取消一個觀察者的註冊。
*/
public void removeObserver(IObserver observer);
/** *//**
* 通知所有觀察者。
*/
public void notifyObserver();
}
/** *//**
* 觀察者介面簡單定義了一個用來更新觀察者資訊的介面。
* 當主體對象被更新時,這個介面方法會被自動調用並更新資訊。
*/
public interface IObserver {
/** *//**
* 介面方法用來更新觀察者的資訊。
*/
public void remind(ITask taskSubject);
}
這兩個介面只定義了主題對象和觀察者對象所需要的介面,但是沒有實現任何任務相關的具體的方法和介面。下面會再定義一個任務介面來規定任務應該具備的功能。這樣分開定義的好處在於,如果我們將不同的模組分解開來,如果一方需要更新,另一方不會受到影響。
/** *//**
* 這裡定義了一個任務應該具有的功能。
*/
public interface ITask {
public void setStatus(String status);
public String getStatus();
public void setProcess(String process);
public String getProcess();
public void setCheckList(String checkList);
public String getCheckList();
}