被观察者
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小时内与您取得联系。