全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 在观察者模式中使用泛型T的实例

被观察者

public class Observable<T> {

  List<Observer> observers = new ArrayList<Observer>();

  boolean changed = false;


  /**
   * Adds the specified observer to the list of observers. If it is already
   * registered, it is not added a second time.
   *
   * @param observer
   *      the Observer to add.
   */
  public void addObserver(Observer observer) {
    if (observer == null) {
      throw new NullPointerException("observer == null");
    }
    synchronized (this) {
      if (!observers.contains(observer))
        observers.add(observer);
    }
  }

  /**
   * Clears the changed flag for this {@code Observable}. After calling
   * {@code clearChanged()}, {@code hasChanged()} will return {@code false}.
   */
  protected void clearChanged() {
    changed = false;
  }

  /**
   * Returns the number of observers registered to this {@code Observable}.
   *
   * @return the number of observers.
   */
  public int countObservers() {
    return observers.size();
  }

  /**
   * Removes the specified observer from the list of observers. Passing null
   * won't do anything.
   *
   * @param observer
   *      the observer to remove.
   */
  public synchronized void deleteObserver(java.util.Observer observer) {
    observers.remove(observer);
  }

  /**
   * Removes all observers from the list of observers.
   */
  public synchronized void deleteObservers() {
    observers.clear();
  }

  /**
   * Returns the changed flag for this {@code Observable}.
   *
   * @return {@code true} when the changed flag for this {@code Observable} is
   *     set, {@code false} otherwise.
   */
  public boolean hasChanged() {
    return changed;
  }

  /**
   * If {@code hasChanged()} returns {@code true}, calls the {@code update()}
   * method for every observer in the list of observers using null as the
   * argument. Afterwards, calls {@code clearChanged()}.
   * <p>
   * Equivalent to calling {@code notifyObservers(null)}.
   */
  public void notifyObservers() {
    notifyObservers(null);
  }

  /**
   * If {@code hasChanged()} returns {@code true}, calls the {@code update()}
   * method for every Observer in the list of observers using the specified
   * argument. Afterwards calls {@code clearChanged()}.
   *
   * @param data
   *      the argument passed to {@code update()}.
   */
  public void notifyObservers(T data) {
    int size = 0;
    Observer[] arrays = null;
    synchronized (this) {
      if (hasChanged()) {
        clearChanged();
        size = observers.size();
        arrays = new Observer[size];
        observers.toArray(arrays);
      }
    }
    if (arrays != null) {
      for (Observer observer : arrays) {
        observer.update(this, data);
      }
    }
  }

  /**
   * Sets the changed flag for this {@code Observable}. After calling
   * {@code setChanged()}, {@code hasChanged()} will return {@code true}.
   */
  protected void setChanged() {
    changed = true;
  }
}

观察者

public interface Observer<T> {
  public void update(Observable<T> observable, T data);
}

以上这篇java 在观察者模式中使用泛型T的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 观察者模式  # java  # Java设计模式之java观察者模式详解  # Java设计模式之观察者模式(Observer模式)  # Java通俗易懂系列设计模式之观察者模式  # java设计模式之观察者模式学习  # java设计模式之观察者模式  # java和Spring中观察者模式的应用详解  # 给大家  # 希望能  # 这篇  # 小编  # 大家多多  # time  # added  # add  # param  # observer  # Adds  # registered  # list  # void  # Clears  # synchronized  # code  # flag  # null  # addObserver 


相关文章: Thinkphp 中 distinct 的用法解析  建站之星安装提示数据库无法连接如何解决?  如何在Windows环境下新建FTP站点并设置权限?  如何快速生成可下载的建站源码工具?  公众号网站制作网页,微信公众号怎么制作?  如何在万网自助建站平台快速创建网站?  如何用PHP快速搭建高效网站?分步指南  制作网站的软件免费下载,免费制作app哪个平台好?  如何选择香港主机高效搭建外贸独立站?  建站之星伪静态规则如何正确配置?  Python文件管理规范_工程实践说明【指导】  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何配置IIS站点权限与局域网访问?  ppt制作免费网站有哪些,ppt模板免费下载网站?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  一键网站制作软件,义乌购一件代发流程?  微信小程序 input输入框控件详解及实例(多种示例)  如何通过服务器快速搭建网站?完整步骤解析  已有域名能否直接搭建网站?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何在Ubuntu系统下快速搭建WordPress个人网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何通过FTP服务器快速搭建网站?  如何快速搭建FTP站点实现文件共享?  Python lxml的etree和ElementTree有什么区别  如何彻底删除建站之星生成的Banner?  Bpmn 2.0的XML文件怎么画流程图  建站之星如何优化SEO以实现高效排名?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  定制建站如何定义?其核心优势是什么?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何通过二级域名建站提升品牌影响力?  如何快速搭建响应式可视化网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  建站10G流量真的够用吗?如何应对访问高峰?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何快速搭建高效WAP手机网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  C++如何使用std::optional?(处理可选值)  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何基于云服务器快速搭建网站及云盘系统?  如何零基础在云服务器搭建WordPress站点?  如何快速登录WAP自助建站平台?  贸易公司网站制作流程,出口贸易网站设计怎么做?  定制建站流程步骤详解:一站式方案设计与开发指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。