一.事件机制基本概念

java中的事件机制的参与者有3种角色:

1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中

2.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,
   这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。

3.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

二.举例 Door1
   属性 name 和status 改变,被监管
  1.Door1

public class Door1 {
private String state = "";
private String name = "";
private DoorStateListener stateListener;
private DoorNameListener nameListener; public void setState(String newValue) {
if (state != newValue) {
state = newValue;
if (stateListener != null){
//注意参数传递
Door1Event event = new Door1Event(this, "state",newValue);
stateListener.doorEvent(event);
}
}
} public void setName(String newValue) {
if (name != newValue) {
name = newValue;
if (nameListener != null){
Door1Event event = new Door1Event(this,"name", newValue);
nameListener.doorEvent(event);
}
}
} public void setStateListener(DoorStateListener stateListener) {
this.stateListener = stateListener;
} public void setNameListener(DoorNameListener nameListener) {
this.nameListener = nameListener;
} public String getState() {
return state;
} public String getName() {
return name;
}
}

2.数据传递对象  Door1Event

import java.util.EventObject;

public class Door1Event extends EventObject {
private static final long serialVersionUID = 6496098798146410884L; private final String key ;
private final String value ; public Door1Event(Object source,String key , String value) {
super(source);
this.key = key;
this.value = value;
} public String getValue() {
return value;
}
public String getKey() {
return key;
}
}

3.被监管对象

Door1StateObserver

class DoorStateListener implements EventListener {
public void doorEvent(Door1Event event) {
if (event.getValue() != null && event.getValue().equals("open")) {
System.out.println("门1打开");
} else {
System.out.println("门1关闭");
}
}
}

Door1NameObserver

class DoorNameListener implements EventListener {
public void doorEvent(Door1Event event) {
Door1 door = (Door1) event.getSource();
System.out.println("I got a new name,named \"" + door.getName() + "\"");
}
}

4 .Door1Test

public class Door1Test {
public static void main(String[] args) { Door1 door = new Door1();
door.setStateListener(new DoorStateListener());
door.setNameListener (new DoorNameListener());
// 开门
door.setState("open");
System.out.println("我已经进来了");
// 关门
door.setState("close");
        // 改名
        door.setName("dengzy"); } }

设计模式_EventObject和EventListener的更多相关文章

  1. JDK里的设计模式

    一.Creational patterns 创建模式 Abstract factory (recognizeable by creational methods returning the facto ...

  2. [JAVA设计模式]第三部分:结构模式

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. (经常看看)jdk 设计模式

    在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,本文列出了部分JDK中的模式应用实例,有兴趣 ...

  4. 23个经典JDK设计模式(转)

    下面是JDK中有关23个经典设计模式的示例: Structural(结构模式) Adapter: 把一个接口或是类变成另外一种. o    ● java.util.Arrays#asList() o  ...

  5. JDK 中的设计模式应用实例

      在 JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改 JDK 源码的前提下开发出自己的应用软件.研究 JDK 类库中的模式实例也不 ...

  6. 设计模式之 观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...

  7. 折腾Java设计模式之观察者模式

    观察者模式 Define a one-to-many dependency between objects where a state change in one object results in ...

  8. 设计模式总结(转自CS-Notes)

    转载地址:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F ...

  9. 设计模式:java及spring观察者模式(有利于代码解耦)

    http://www.cnblogs.com/softidea/p/5716870.html 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...

随机推荐

  1. easyui-combobox绑定回车事件注意事项

    回车事件的定义的位置必须是easyui-combobox数据加载的后面,才有效果. HTML文件: <select id="aucBrandNo" class="e ...

  2. zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法

    一.zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法 1.编译安装zabbix-server出现 编译时加参数:- ...

  3. 【云计算】Ubuntu14.04 搭建GlusterFS集群

    1.修改 /etc/hosts 所有服务节点执行(如果集群中没有DNS,可忽略此步骤): 10.5.25.37 glusterfs-1-5-25-3710.5.25.38 glusterfs-2-5- ...

  4. 心路历程——毕设程序mr跑不通的问题

    这个bug改了实在是太多天了,前前后后折腾了太久,最后多谢@CC学长的帮助,找到了问题,才终于跑通了!!!这里记录一下这个bug我前后改的过程,引以为戒! 毕设中需要进行mapreduce进行数据清洗 ...

  5. [Angular] Two things about OnChanges Lifecycle hook

    1. ngOnChanges is called before ngOnInit but after constructor() 2. ngOnChanges is called because of ...

  6. [Erlang]Erlang经常使用工具解说

    原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface 联系邮箱:cto@188.com 但凡有图形界面的都须要linux系统安装了wx图形 ...

  7. vue - 选项

    1.计算属性(computed):主要是对原数据进行改造输出.改造输出:包括格式化数据(价格,日期),大小写转换,排序,添加符号 2.methods(methods):用于绑定html中的事件对应的方 ...

  8. SQL-ORDER BY 多字段排序(升序、降序)

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */   ORDER BY _column1, _column2 DESC; /* _col ...

  9. 程序猿的职场潜意识Top10

    什么叫潜规则?事实上就是不明文规定的一些规则,关键是他没法明文规定,由于有的规则太没节操. 在我们职场中有些规则你不遵守将举步艰难.而要玩转这些潜规则.那么你必需要具备例如以下10个潜意识: 1.项目 ...

  10. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...