java 通知_基于Java API实现通知机制
本节我们来假设这样一个场景:小伙伴们在 C语言中文网提问后,如果指定了老师回答,那么对应的老师就会收到邮件通知,这就是观察者模式的一种应用场景。看到这里,有些小伙伴可能会想到 MQ、异步队列等,其实 JDK 本身就提供了这样的 API。下面我们用代码来还原这样一个应用场景。
首先创建 CLanguage 类,代码如下。
package net.biancheng.c.observer;
import java.util.Observable;
public class CLanguage extends Observable {
private String name = "C语言中文网";
private static final CLanguage CLanguage = null;
private CLanguage() {
}
public static CLanguage getInstance() {
return CLanguage;
}
public String getName() {
return name;
}
public void publishQuestion(Question question) {
System.out.println(question.getUserName() + "在" + this.name + "上提交了一个问题。");
setChanged();
notifyObservers(question);
}
}
java.util.Observable 类和 java.util.Observer 接口在《观察者模式详解》中的模式扩展部分介绍。
然后创建问题 Question 类。
package net.biancheng.c.observer;
public class Question {
private String userName;
private String content;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
接着创建老师 Teacher 类,代码如下。
package net.biancheng.c.observer;
import java.util.Observable;
import java.util.Observer;
public class Teacher implements Observer {
private String name;
public Teacher(String name) {
this.name = name;
}
public void update(Observable o, Object arg) {
CLanguage CLanguage = (CLanguage) o;
Question question = (Question) arg;
System.out.println("======================");
System.out.println(name + "老师,你好!\n" +
"您收到了一个来自" + CLanguage.getName() + "的提问,希望您解答。问题内容如下:\n" +
question.getContent() + "\n" +
"提问者:" + question.getUserName());
}
}
最后编写客户端测试代码如下。
package net.biancheng.c.observer;
public class Test {
public static void main(String[] args) {
CLanguage cLanguage = CLanguage.getInstance();
Teacher yan = new Teacher("严");
Teacher xie = new Teacher("解");
cLanguage.addObserver(yan);
cLanguage.addObserver(xie);
//用户行为
Question question = new Question();
question.setUserName("张三");
question.setContent("观察者模式适用于哪些场景?");
cLanguage.publishQuestion(question);
}
}
运行结果如下。
张三在C语言中文网上提交了一个问题。
======================
解老师,你好!
您收到了一个来自C语言中文网的提问,希望您解答。问题内容如下:
观察者模式适用于哪些场景?
提问者:张三
======================
严老师,你好!
您收到了一个来自C语言中文网的提问,希望您解答。问题内容如下:
观察者模式适用于哪些场景?
提问者:张三
java 通知_基于Java API实现通知机制相关推荐
- java比价_基于JAVA的慢慢买比价网api调用代码实例
基于JA V A的慢慢买比价网api调用代码实例 代码描述:基于JA V A的慢慢买比价网api调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; impo ...
- 租车java 查询_基于java实现租车管理系统
概述 基于java + swing + JFrame 的图书馆管理系统,租车,还车,管理员管理用户,付款等. 部分代码 public class Login extends JFrame { priv ...
- 抽奖功能java开发_基于Java实现抽奖系统
摘要:这篇Java开发技术栏目下的"基于Java实现抽奖系统",介绍的技术点是"抽奖系统.Java.抽奖.基于.系统.实现",希望对大家开发技术学习和问题解决有 ...
- java魔塔_基于java的魔塔游戏的设计与实现论文.docx
毕业设计(论文)题目: 基于java的魔塔游戏的设计与实现 毕业设计(论文)要求及原始数据(资料): 1.了解和运用Java面向对象的特性: 2.熟练掌握模块化设计的思想,锻炼使用java语言的能力: ...
- 医院医生评价的java代码_基于JAVA的医院信息查询接口调用代码实例
基于JAVA的医院信息查询接口调用代码实例 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io ...
- 物联网 云端java架构_基于java的物联网架构实现
基于java的多设备类型物联网架构实现 前言:19年11月开始从 [金融]行业转 [物联网],路途坎坷,一个人摸索前进,不过也学到了很多新的东西,交了很多好朋友,在此感谢各位! 以下是一些经验分享,希 ...
- 图像分割的java程序_基于java的图像分割(数字图像处理)
[实例简介] 基于java的图像分割(数字图像处理),程序中包含 全局阈值分割,Roberts边缘检测分割,灰度图像,直方图. [实例截图] [核心代码] ImageProcess └── Image ...
- hannoi塔java程序_基于Java实现的Hannoi汉诺塔自动演示程序
1 设计要求 设计GUI界面的Hannoi塔.汉诺塔中有三个座,名字分别为A,B,C.初始状态时A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上.用户可以用鼠标选中盘子,然 ...
- 21点 小游戏 java代码_基于Java的21点扑克游戏的实现
在上次写的比较牌点的扑克游戏上Java扑克游戏(多人多牌数比较游戏)的实现中,添加21点游戏规则,实现21点牌类游戏.具体实现步骤如下:[需要源代码的留QQ,大家一起探讨探讨哈,谢谢啦!] 抽象出规则 ...
最新文章
- JAVA 反射知识点总汇
- 被动信息收集之RECON-NG(七)
- Objective-C语法之Object对象的那些事儿(五)
- 广西区计算机一级考试操作题,全国高校计算机等级考试(广西考区)一级笔试试题卷.doc...
- GIMP 2.10教程
- IE 8 下面的垂直水平居中
- 自媒体这个行业看似门槛很低,但是赚到钱的人,也是少数,为什么呢?
- JS之Date对象和获取系统当前时间
- 赛尔原创 | ACL20 用于多领域端到端任务型对话系统的动态融合网络
- 中国历史上成功的两人合作, 改进, 提高的例子
- nfc卡模式与标准模式_马苏开启年后减肥模式,素颜自拍打卡,皮肤光滑香汗淋漓惹人注目...
- 计算机科学导论5版答案,5计算机科学导论习题答案.doc
- Pentest Wiki Part4 后渗透(二)
- 展锐sc8541E多媒体网络摄像播放-液晶驱动一体板
- 网站被黑被劫持跳转的症状与木马代码清除
- vue实现浏览器桌面通知
- 【ME909】华为ME909 4G LTE模块在树莓派下通过minicom进行发送短信演示
- android wear iphone7,多款Android Wear手表不兼容苹果iPhone7
- mongodb的分组求和(使用aggregate方法)
- 郭德纲相声里的插入广告
热门文章
- python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(四)
- (转载)Linux一句话精彩-1
- golang post 文字 图片_超简单的图片爬虫,搜集图片分分钟
- 想搞定大厂面试官?java读取txt文件并存入数组
- python点触图形验证码识别_GitHub - AaronJny/captcha_detection: 点选式验证码识别方案...
- Elasticsearch从入门到放弃:文档CRUD要牢记
- 「推荐系统从0到1」服务发现
- 看上去很美的开发者大会——极路由背后的尴尬
- 2022-4-11 修改TCP发送缓冲区大小
- 2022-4-2 Leetcode 1588.所有奇数长度子数组的和