博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】观察者模式
阅读量:4955 次
发布时间:2019-06-12

本文共 1381 字,大约阅读时间需要 4 分钟。

观察者模式分为两块

  • 消息中心
  • 订阅者

大体模式为,订阅者在消息中心订阅自己喜欢的主题。当订阅的主题发生变化时,消息中心会推送相应的更新消息到订阅者手中。这里消息中心中可以有很多主题。这边只拿一个主题来举例。

主题接口中,提供方法供给订阅者订阅主题,和取消订阅主题、以及一个通知所有订阅者的通知方法

package com.chapter.two;public interface Subject {    void registerObserver(Observer observer);    void removeObserver(Observer observer);    void notifyObservers();}

而订阅者就相对简单,只有一个通知推送方法供主题去推送

package com.chapter.two;public interface Observer {    void update();}

对于主题接口的具体实现主题,实现起来也相对简单,维护一个订阅者的集合

package com.chapter.two;import java.util.ArrayList;import java.util.List;public class WeatherData implements Subject {    private List
observers = new ArrayList
(); private boolean status = false; //设置一个状态,当想要更新的时候,必须先要去把状态字段置为true public void setStatus() { this.status = true; } //当需要推送消息时,先判断一把状态,如果状态正常,就去推送给所有的订阅者 public void setChanges(){ if(status){ notifyObservers(); } status = false; } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer sObserver : observers) { //这里为具体实现订阅者的update方法 sObserver.update(); } }}

转载于:https://www.cnblogs.com/dzc-zyw/p/6548047.html

你可能感兴趣的文章
43. Multiply Strings 字符串相乘
查看>>
python入门学习2
查看>>
centos 安装php扩展的两种方法
查看>>
实验四 用信号量解决进程互斥与同步问题
查看>>
To execute Mr.LDA
查看>>
数据库特定SQL分页pdf
查看>>
About Face 3:交互设计精髓pdf
查看>>
jsday8
查看>>
DFS之城堡问题
查看>>
Implement Stack using Queues
查看>>
理解javascript中的回调函数(callback)【转】
查看>>
hdu 6113 度度熊的01世界
查看>>
poj 2441 Arrange the Bulls
查看>>
Selenium Webdriver——处理Table
查看>>
CakePHP 2.x CookBook 中文版 第七章 模型 之 关联:将模型连接在一起
查看>>
计算机技术:编程语言:Python
查看>>
BZOJ 1637: [Usaco2007 Mar]Balanced Lineup
查看>>
CSS
查看>>
BZOJ3990 排序
查看>>
商城签到功能的设计与实现
查看>>