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,大家一起探讨探讨哈,谢谢啦!] 抽象出规则 ...
最新文章
- 2019-3:时间飞逝
- java反射类带构造函数_java中反射类的加载和构造函数
- 《101 Windows Phone 7 Apps》读书笔记-Silly Eye
- android修改系统设置权限_安卓保护隐私利器!完美解决软件「不给权限就不运行」的小工具...
- 日照智能化乳品产业园签约 农民丰收节交易会对话乡村振兴
- Netflix:通过可视化和统计学改进用户QoE
- js中怎么写自执行函数
- vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码
- 国防科大计算机研究生院,国防科大计算机学院在读硕士的程序人生!
- 系统权限控制设计001---RBAC用户角色权限设计方案
- js 台阶有n级_乔欣这是“开眼角”了?只在眼妆中多加这一步,整个人变美了N倍...
- Ubuntu 18.04 安装 CUDA
- QQ sdk和Android sdk 28的兼容处理
- netstat 查看网络连接、路由表、接口状态、端口信息
- VARCHART XGantt用户手册:如何甘特图中的数据表
- 【OpenCV】基于Qt的“破产版”全能扫描王
- 该内存不能为written或read的解决方案(比较全)
- 干货:制造业中的机械智能(内附完整PPT)
- pci 1751 java_PCI-1751快速安装使用手册.PDF
- #define定义宏常量和宏函数
热门文章
- 右键文件夹用某个软件打开
- python错误Errors与异常Exceptions
- canvas详细入门教程(1W字 吐血分享)
- PyQt5 随笔:信号与槽的两种使用方法:@pyqtSlot() 和 connect()
- mysql测试死锁_mysql死锁几种情况的测试_MySQL
- 代码经验分享 计算机毕业设计之Python+Vue.js机器学习求职招聘推荐系统 求职招聘数据分析
- python查找某一目录下的前缀相同的文件并移动到指定目录, 目录下会有不同前缀的文件, 不同前缀的文件移动到不同目录 举个例...
- Linux NetCore下Pdf转图片 内存溢出
- java 输出文件到mac路径_javamac的文件路径怎么写
- mac中html绝对路径怎么写,mac查看路径