觀察者模式
觀察者模式是一種常見模式,在許多情況下被廣泛使用。可以從 YouTube 獲取一個真實示例:當你喜歡某個頻道並希望獲得所有新聞並通過此頻道觀看新視訊時,你必須訂閱該頻道。然後,每當此頻道釋出任何新聞時,你(以及所有其他訂閱者)都將收到通知。
觀察者將有兩個組成部分。一個是廣播公司(頻道),另一個是接收方(你或任何其他訂戶)。廣播公司將處理訂閱它的所有接收者例項。當廣播公司發起新事件時,它會向所有接收器例項宣佈這一事件。當接收者收到一個事件時,它將不得不對該事件做出反應,例如,開啟 YouTube 並播放新視訊。
實現觀察者模式
-
廣播公司必須提供允許接收者訂閱和取消訂閱的方法。當廣播公司發起事件時,需要通知訂戶已發生事件:
class Channel{ private List<Subscriber> subscribers; public void subscribe(Subscriber sub) { // Add new subscriber. } public void unsubscribe(Subscriber sub) { // Remove subscriber. } public void newEvent() { // Notification event for all subscribers. } }
-
接收器需要實現一個處理來自廣播公司的事件的方法:
interface Subscriber { void doSubscribe(Channel channel); void doUnsubscribe(Channel channel); void handleEvent(); // Process the new event. }