监听器的原理是观察者模式。就像明星(事件源)聚拢了一群粉丝(观察者)。当明星有啥举动的时候会通过粉丝们报道出去。

订阅信息、计算器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();
}
}

转载于:https://www.cnblogs.com/llguanli/p/8595568.html

java监听器演示样例相关推荐

  1. java设计模式演示样例

    创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...

  2. Java 8 时间日期库的20个使用演示样例

    除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...

  3. java swing 示例_JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  4. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /*** 又一次抛出异常* 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是在用 ...

  5. arcsde java_ArcSDE SDK For Java二次开发介绍、演示样例

    在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. Androidclient与服务端交互之登陆演示样例

    今天了解了一下androidclient与服务端是如何交互的,发现事实上跟web有点类似吧,然后网上找了大神的登陆演示样例.是基于IntentService的 1.后台使用简单的servlet,支持G ...

  8. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  9. Android清理设备内存具体完整演示样例(二)

    版权声明: https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c;import ja ...

最新文章

  1. 2018-4-5 丘成桐---现代几何学与计算机科学---自我总结
  2. sklearn(五)计算acc:使用metrics.accuracy_score()计算分类的准确率
  3. Spring全局异常处理的三种方式
  4. 《构建之法》第6 - 7章
  5. java 清空jframe_java – 在新游戏中清除我的JFrame和JPanel
  6. 如何设计一门语言(二)——什么是坑(b)
  7. Notepad++去除代码行号的几种方法
  8. python操作hive数据库代码_windows下怎么用python连接hive数据库
  9. Eclipse中手动清理项目缓存,
  10. Mysql_mysql 性能分析及explain用法
  11. OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……
  12. LeetCode 1930. 长度为 3 的不同回文子序列(计数)
  13. Mysql之drop、delete、truncate的区别
  14. skills --札记
  15. 牛客小白月赛4 J 强迫症 思维
  16. 如何解压 GZ 文件
  17. 去掉百度地图API左下角的百度LOGO方法
  18. idea工具首次提交代码到git上
  19. 解决requestLayout() improperly called by android.widget.TextView{...}
  20. ajax hack,Ajax Hacks-hack9 深入了解HTTP Respon_jquery

热门文章

  1. oracle 设置 shmmax,安装ORACLE时在Linux上设置内核参数的含义
  2. mysql+查询会话sql_MySQL Processlist--查看会话执行过的SQL情况
  3. OSPF中的次优外部路由——Forwarding Address
  4. Oracle统计大小语句(用户、表、分区表、索引等)
  5. Android入门教程:ConstraintLayout约束布局
  6. opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移...
  7. HTML5本地存储——IndexedDB
  8. C++ 枚举类型的思考
  9. MFC和Direct3D9一起使用
  10. SSH集成之导入导出代码示例-页面部分(1)