一.事件机制基本概念

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. 【Tomcat MyEcplise】MyEcplise添加一个新的Server,Tomcat8.5报错

    添加新的Tomcat添加不进去,报错: The Apache Tomcat installation at this directory is version 8.5.11.  A Tomcat 8. ...

  2. ORACLE常用性能监控SQL【一】

    目录(?)[+] 系列 ORACLE常用性能监控SQL[一] ORACLE常用性能监控SQL[二] Oracle-动态性能视图解读 系列 死锁后的解决办法 生成Kill Session语句 查看导致死 ...

  3. 自动build服务器 CruiseControl.NET

    <cruisecontrol xmlns:cb="urn:ccnet.config.builder"> <!-- This is your CruiseContr ...

  4. soap-学习

    1. SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息. 简单的说:SOAP是用于访问网络服务的协议. 2. 什么是SOAP SOAP 指简易对象访问协议 SOAP ...

  5. Android MIFARE NFCA源码解析

    Android MIFARE NFCA源码解析TagTechnology定义了所有标签的共有接口类BasicTagTechnology 实现了TagTechnology的一些接口 再有具体的标签协议继 ...

  6. LINUX下渗透提权之嗅探技术

    内网渗透在攻击层面,其实更趋向于社工和常规漏洞检测的结合,为了了解网内防护措施的设置是通过一步步的刺探和经验积累,有时判断出错,也能进入误 区.但是如果能在网内进行嗅探,则能事半功倍,处于一个对网内设 ...

  7. P2P网络借贷系统-核心功能-用户投标-业务解说

    用户投标是P2P网络借贷系统的核心功能.相对照较复杂,为了更好地梳理业务和技术实现思路,特地具体总结分析下. 输入:用户id-uid.标的id-lid.投标金额-amount 1.依据lid,获得贷款 ...

  8. APNS .p12文件转换为 .pem文件

    1:先用mac的钥匙串工具,把APN的推送证书转换为 .p12文件: 2:在mac的终端下 把.p12文件转换为 .pem文件 openssl pkcs12 -in apns-dev-cert.p12 ...

  9. SQL中的重要语句

    1.查询每个数据库有多少空间被浪费 如果你想知道在你数据库设计后,每页有多少空间浪费掉,你可 以通过下列动态管理视图(DMV)查询下缓冲池:sys.dm_os_buffer_descriptors 从 ...

  10. ICP备案的一些tips~

    1)一个单位是一个备案主体,只能有一个主体备案号: 2)一个企业下面可以有多个网站,依次在备案号后加-1 -2,以此类推,也叫网站备案号,每个网站只能有一个网站备案号.(所谓网站,不是指域名,也不是i ...