java监听器演示样例
监听器的原理是观察者模式。就像明星(事件源)聚拢了一群粉丝(观察者)。当明星有啥举动的时候会通过粉丝们报道出去。
订阅信息、计算器button都是该原理的应用。
以下写了一个监听器的小样例:
package listener;
import java.util.EventObject;
/**
* 定义事件对象,用于标记当前进行的动作。必须继承EventObject。
* @author zyj
*
*/
public class StateEvent extends EventObject {
private static final long serialVersionUID = 5323292975415079206L;
private Enum<ActionEnum> action;
public StateEvent(Object source, Enum<ActionEnum> action) {
super(source);
this.action = action;
}
public Enum<ActionEnum> getAction() {
return action;
}
public void setAction(Enum<ActionEnum> action) {
this.action = action;
}
}
package listener;
public enum ActionEnum {
wake,sleep;
}
package listener;
import java.util.EventListener;
/**
* 定义监听接口,负责监听StateEvent事件。
必须继承EventListener。
* @author zyj
*
*/
public interface StateListener extends EventListener {
void handleState(StateEvent event);
}
package listener;
public class WakeListener implements StateListener {
@Override
public void handleState(StateEvent event) {
if(event.getAction() != null && event.getAction().equals(ActionEnum.wake)){
System.out.println("你醒了。");
}
}
}
package listener;
public class SleepListener implements StateListener {
@Override
public void handleState(StateEvent event) {
if(event.getAction() != null && event.getAction().equals(ActionEnum.sleep)){
System.out.println("你睡了!");
}
}
}
package listener;
import java.util.ArrayList;
import java.util.List;
public class StateManager {
private List<StateListener> list = new ArrayList<StateListener>();
public boolean addListener(StateListener listener){
if(listener == null)
return false;
return list.add(listener);
}
public boolean removeListener(StateListener listener){
if(listener == null)
return false;
return list.remove(listener);
}
private void notifyAllListeners(StateEvent event){
for(StateListener listener : list){
listener.handleState(event);
}
}
public void wake(){
StateEvent event = new StateEvent(this, ActionEnum.wake);
notifyAllListeners(event);
}
public void sleep(){
StateEvent event = new StateEvent(this, ActionEnum.sleep);
notifyAllListeners(event);
}
}
package listener;
public class ListenerTest {
public static void main(String[] args) {
StateManager manager = new StateManager();
manager.addListener(new WakeListener());
manager.addListener(new SleepListener());
manager.wake();
System.out.println("-----------------");
manager.sleep();
}
}
java监听器演示样例的更多相关文章
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- Java多线程演示样例(模拟通话,sleep,join,yield,wait,notify,Semaphore)
主线程等待子线程的多种方法 synchronized浅析 sleep 是静态方法,Thread.sleep(xx)谁调用谁睡眠. join 是合并方法.当前线程调用其它线程xx.join()则等到xx ...
- java设计模式演示样例
创建模式 1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...
- HTTP基本认证(Basic Authentication)的JAVA演示样例
大家在登录站点的时候.大部分时候是通过一个表单提交登录信息.可是有时候浏览器会弹出一个登录验证的对话框.例如以下图,这就是使用HTTP基本认证.以下来看看一看这个认证的工作过程:第一步: clien ...
- Java 8 时间日期库的20个使用演示样例
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
- java并行调度框架封装及演示样例
參考资料: 阿里巴巴开源项目 CobarClient 源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
随机推荐
- classpath路径
在项目被集成开发环境编译后,src目录下的东西会编译到WEB-INF/classes目录下,而WEB-INF/classes目录就是所谓的classpath. 将数据库连接配置dataSource.x ...
- 设计模式(八)组合模式 Composite
组合模式: 允许你将对象组合成树形结构来表现“整体/部分”层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 组合模式适用于创建复杂的对象,这个对象包含某些个别的对象以及这些对象的组合. 从 ...
- 如何在c#代码中执行带GO语句的SQL文件
需要在C#代码中执行一个SQL文件的内容.遇到了两个问题: 1. 因为SQL文件中有"GO"语句,执行时报错"Incorrect syntax near 'GO'.& ...
- P2258 子矩阵 (搜索,动态规划)
题目链接 Solution 搜索+DP. 刚好把搜索卡死的数据范围... 然后应该可以很容易想到枚举行的情况,然后分列去DP. 行的情况直接全排列即可,复杂度最高 \(O(C_{16}^{8})\). ...
- 【CCF】地铁修建 改编Dijkstra
[题意] 给定有n个点,m条边的无向图,没有平行边和自环,求从1到n的路径中,最长段的最小值(最短路不再是路径和,而是所有段中的最大值) [AC] #include<iostream> # ...
- 【MFC】Button控件和Picture Control的鼠标事件执行顺序
1.Button控件鼠标事件执行顺序 (1) WM_LBUTTONDOWN (2) WM_LBUTTONUP (3) OnBnClickedButton1(); 2.Picture Control的鼠 ...
- JProfile 9.2 linux安装及windows客户端远程监控
http://blog.csdn.net/fengzhou0920/article/details/52119039 1. 测试环境 服务器:Linux X64;tomcat 7.0;jd ...
- LeetCode OJ--Merge Sorted Array *
http://oj.leetcode.com/problems/merge-sorted-array/ 两个有序数组A和B的归并排序,将结果存到A中.因为已知两数组长度且A的数组足够大,所以倒着处理, ...
- Oracle 12c JDBC方式连接PDB数据库
1.配置监听 这里假定CDB数据库名为ORCL,PDB在CDB下面名称为PDBORCLlistener.ora添加(#后面为注释,不要添加进去) SID_LIST_LISTENER = (SID_LI ...
- git使用笔记一:
Get code into Bitbucket fast using the command line Set up your local directory Set up Git on your m ...