java 在观察者模式中使用泛型T的实例
发布时间 - 2026-01-10 23:11:44 点击率:次被观察者
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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Linux系统命令中tree命令详解
如何快速生成ASP一键建站模板并优化安全性?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
使用C语言编写圣诞表白程序
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel怎么清理缓存_Laravel optimize clear命令详解
node.js报错:Cannot find module 'ejs'的解决办法
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何处理表单验证?(Requests代码示例)
IOS倒计时设置UIButton标题title的抖动问题
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何使用.env文件管理环境变量?(最佳实践)
如何彻底删除建站之星生成的Banner?
油猴 教程,油猴搜脚本为什么会网页无法显示?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Python函数文档自动校验_规范解析【教程】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
网站制作软件免费下载安装,有哪些免费下载的软件网站?
WordPress 子目录安装中正确处理脚本路径的完整指南
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
制作旅游网站html,怎样注册旅游网站?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
PHP 500报错的快速解决方法
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何快速搭建安全的FTP站点?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何利用DOS批处理实现定时关机操作详解
如何注册花生壳免费域名并搭建个人网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Laravel如何升级到最新版本?(升级指南和步骤)
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何用低价快速搭建高质量网站?
香港服务器如何优化才能显著提升网站加载速度?

