觀察者模式

觀察者模式是一種常見模式,在許多情況下被廣泛使用。可以從 YouTube 獲取一個真實示例:當你喜歡某個頻道並希望獲得所有新聞並通過此頻道觀看新視訊時,你必須訂閱該頻道。然後,每當此頻道釋出任何新聞時,你(以及所有其他訂閱者)都將收到通知。

觀察者將有兩個組成部分。一個是廣播公司(頻道),另一個是接收方(你或任何其他訂戶)。廣播公司將處理訂閱它的所有接收者例項。當廣播公司發起新事件時,它會向所有接收器例項宣佈這一事件。當接收者收到一個事件時,它將不得不對該事件做出反應,例如,開啟 YouTube 並播放新視訊。

實現觀察者模式

  1. 廣播公司必須提供允許接收者訂閱和取消訂閱的方法。當廣播公司發起事件時,需要通知訂戶已發生事件:

    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.
        }
    }
    
  2. 接收器需要實現一個處理來自廣播公司的事件的方法:

    interface Subscriber {
        void doSubscribe(Channel channel);
        void doUnsubscribe(Channel channel);
        void handleEvent();  // Process the new event.
    }