观察者模式

观察者模式是一种常见模式,在许多情况下被广泛使用。可以从 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.
    }