摘要:说明生活中,监听无处不在。比如说,手机播放音乐功能,也是一种监听你不点击播放按钮,手机就不放歌,当你点击时,手机就播放音乐。即触发某种行为,便执行相应的动作。
说明
生活中,监听无处不在。比如说,手机播放音乐功能,也是一种监听:你不点击播放按钮,手机就不放歌,当你点击时,手机就播放音乐。即触发某种行为,便执行相应的动作。
组成Java监听模式右三个部分组成:事件源、事件对象、事件监听器
当事件源触发某种行为,会自动执行事件监听器里面相应的方法
事件监听器方法参数是事件对象,事件对象包含事件源的引用,在方法中可以获取事件源的引用
PS:好吧,说的有点晕,因为我也是刚学的啦,看的晕的同学直接看代码就好了。
实现事件源:Student拥有read()方法,
</>复制代码
package com.petro.listener;
/**
* @ClassName: Student
* @description: 监听模式的事件源
* @author Petro Chen
* @date: 2017年9月12日下午11:32:03
*/
public class Student {
// read方法事件监听器引用
private Listener listener;
/**
* @description: 注册read方法的事件监听器
* @param listener 事件监听器引用
* @return void
* @throws
*/
public void setReadListener(Listener listener) {
this.listener = listener;
}
/**
* @description: 学生的read方法
* @return void
* @throws
*/
public void read() {
if (listener != null) {
Event event = new Event();
event.setStudent(this);
// 学生正在读书...
listener.isReading(event);
}
}
}
事件监听器:用来监听Student.read()方法
</>复制代码
package com.petro.listener;
/**
* @ClassName: Listener
* @description: 事件监听器
* @author Petro Chen
* @date: 2017年9月12日下午11:33:56
*/
public interface Listener {
/**
* @description: 学生读书触发的事件
* @param event 事件对象引用,通过这个引用,获取事件源的引用,然后就可以对事件源进行操作
* @return void
* @throws
*/
public void isReading(Event event);
}
事件对象:持有事件源的引用
</>复制代码
package com.petro.listener;
/**
* @ClassName: Event
* @description: 事件对象
* @author Petro Chen
* @date: 2017年9月12日下午11:41:28
*/
public class Event {
// 放置事件源的引用
private Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
到此为止,我们的监听模式写完了,接下来当然是测试啦
测试部分:监听接口实现
</>复制代码
package com.petro.test;
import com.petro.listener.Event;
import com.petro.listener.Listener;
/**
* @ClassName: ReadListener
* @description: 监听器实现,读书(read方法)监听器
* @author Petro Chen
* @date: 2017年9月13日上午12:03:35
*/
public class ReadListener implements Listener {
@Override
public void isReading(Event event) {
/**
* 使用 event.getStudent()方法获取事件源的引用,然后执行相关操作
*/
System.out.println("正在读书...");
}
}
测试部分:程序入口
</>复制代码
package com.petro.test;
import com.petro.listener.Student;
/**
* @ClassName: Test
* @description: 监听器模式测试
* @author Petro Chen
* @date: 2017年9月13日上午12:07:04
*/
public class Test {
public static void main(String[] args) {
ReadListener readListener = new ReadListener();
Student student = new Student();
student.setReadListener(readListener);
// 当执行这个方法时,会自动调用ReadListener.isReading()方法
student.read();
}
}
监听模式demo地址,有需要的可以去clone
</>复制代码
https://github.com/MiniPeter/...
结语
本篇博文到此差不多就结束啦,对本篇博文有建议或者疑惑的可以留言评论哦。欢迎指正错误>_<
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70923.html
摘要:线程安全的实现前面章节介绍了在现代环境下的实现观察者模式,虽然简单但很完整,但这一实现忽略了一个关键性问题线程安全。截止目前实现了线程安全,在接下来的章节中将介绍提取主题的逻辑并将其类封装为可重复代码单元的方式优缺点。 【编者按】本文作者是 BAE 系统公司的软件工程师 Justin Albano。在本篇文章中,作者通过在 Java8 环境下实现观察者模式的实例,进一步介绍了什么是观察...
摘要:本文主要讲述消息服务在中的使用。所以需要一个监听容器工厂的概念,即接口,它会引用上面创建好的与的连接工厂,由它来负责接收消息以及将消息分发给指定的监听器。为了消费消息,订阅者必须保持运行的状态。 JMS 在 SpringBoot 中的使用 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog> 本文所有服务均采用doc...
摘要:在前面的文章中介绍过观察者模式及并发编程的基础知识,为了让大家更好的了解观察者模式故而特意写了这篇番外概述在多线程下我们需要知道当前执行线程的状态是什么比如运行,关闭,异常等状态的通知,而且不仅仅是更新当前页面。 在前面的文章中介绍过 观察者模式 及 并发编程的基础知识,为了让大家更好的了解观察者模式故而特意写了这篇番外.. 概述 在Java多线程下,我们需要知道当前执行线程的状态是...
摘要:阻塞请求结果返回之前,当前线程被挂起。也就是说在异步中,不会对用户线程产生任何阻塞。当前线程在拿到此次请求结果的过程中,可以做其它事情。事实上,可以只用一个线程处理所有的通道。 准备知识 同步、异步、阻塞、非阻塞 同步和异步说的是服务端消息的通知机制,阻塞和非阻塞说的是客户端线程的状态。已客户端一次网络请求为例做简单说明: 同步同步是指一次请求没有得到结果之前就不返回。 异步请求不会...
摘要:在设定时间内接收到相应操作的请求则返回可以处理请求的数量,否则在超时后返回,程序继续执行。使用接收请求并处理接收到请求后调用返回的集合。保存了处理当前请求的和,并提供了不同的操作类型。默认值为且其值必须小于的值。 Java中的Socket可以分为普通Socket和NioSocket两种。 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为Server...
阅读 1590·2021-11-22 13:54
阅读 4497·2021-09-22 15:56
阅读 1948·2021-09-03 10:30
阅读 1409·2021-09-03 10:30
阅读 2168·2019-08-30 15:55
阅读 1929·2019-08-30 14:13
阅读 2148·2019-08-29 15:19
阅读 2447·2019-08-28 18:13