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