事件处理模式
来源:互联网 发布:淘宝经营类目怎么修改 编辑:程序博客网 时间:2024/06/13 09:13
事件处理的三要素
监听器模式:事件源经过事件的封装传给事件监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法
从而我们要先定义一个事件源:
假如需求如下:
有一个校花级别的美女,她有很多追求者,她作为一个事件源,这些追求者作为监听器,因为监听器会对事件源的喜怒哀乐做出相关的反应。例如,校花心情不好了,监听器们会表现表现带她去看电影,吃东西,送花啥的等等;
先定义一个事件源类:
import java.util.ArrayList;import java.util.List;//事件源public class Girl { private String name; //为追求者们建立一个容器 private List<EmotionListener> els = new ArrayList<EmotionListener>(); public Girl(String name){ this.name = name; } //女神添加追求者到自己的考虑范围 public void addEmotionListener(EmotionListener e){ els.add(e); } //女神从考虑范围内删除 public void removeEmotionListener(EmotionListener e){ els.remove(e); } //女神高兴的时候 //发出高兴这个状态,让追求者们知道 //即遍历追求者数组,让追求者们调用自己在女神高兴时要做的动作 public void happy(){ EmotionEvent e = new EmotionEvent(this); for(EmotionListener em : els){ try { em.happy(e); } catch (EmotionException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } public void setName(String name) { this.name = name; } public String getName() { return name; }}
校花的情绪类
也就是发情绪这个事件的对象
package com.ActionEvent;//情绪 的事件对象public class EmotionEvent { /** * @param args */ private Girl source; public EmotionEvent(Girl source){ this.setSource(source); } public void setSource(Girl source) { this.source = source; } public Girl getSource() { return source; }}
创建追求者类
也就是负责监听女神心情的监听者们,由于每一个监听者对自己的女神做出的动作不同,从而定义为一个接口
package com.ActionEvent;//boy 事件监听public interface EmotionListener { //e 监听的事件对象 public void happy(EmotionEvent e)throws EmotionException; public void sad(EmotionEvent e)throws EmotionException;}
一个简单的自定义异常类
package com.ActionEvent;public class EmotionException extends Exception{ public EmotionException() { super(); } public EmotionException(String message, Throwable cause) { super(message, cause); } public EmotionException(String message) { super(message); } public EmotionException(Throwable cause) { super(cause); }}
测试类:
package com.ActionEvent;public class EmotionTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //构建校花女孩对象 Girl mr = new Girl("马蓉"); Girl sy = new Girl("宋雅"); EmotionListener bb = new EmotionListener(){ public void happy(EmotionEvent e)throws EmotionException{ Girl g = e.getSource(); if(g.getName().equals("马蓉")){ System.out.println("宝强送给校花"+e.getSource()+"一辆跑车!"); } else{ System.out.println("宝强的礼物当年只送给前妻马蓉!"); } } public void sad(EmotionEvent e)throws EmotionException{ } }; EmotionListener sz = new EmotionListener(){ public void happy(EmotionEvent e)throws EmotionException{ Girl g = e.getSource(); if(g.getName().equals("马蓉")){ System.out.println("宋哲给"+g+"一套房子!"); } if(g.getName().equals("宋雅")){ System.out.println("宋哲给"+g+"一个棒棒糖!"); } } public void sad(EmotionEvent e)throws EmotionException{} }; //女神加关注 mr.addEmotionListener(bb); mr.addEmotionListener(sz); sy.addEmotionListener(bb); sy.addEmotionListener(sz); //触发事件 System.out.println(mr.getName()+"触动了 happy 方法"); mr.happy(); System.out.println(sy.getName()+"触动了 happy 方法"); sy.happy(); }}
输出结果
0 0
- Java事件处理模式
- Java事件处理模式
- 事件处理模式
- Android的事件处理模式
- Java事件处理模式(小结)
- android委托模式----事件处理
- ChoiceGroup单选模式及事件处理
- OOB模式下Exit事件的处理
- 高性能复杂事件处理---模式匹配
- 两种高效的事件处理模式
- java事件处理机制(自定义事件)/观察者模式
- js事件设计模式-事件处理流程传参问题
- 两种高效的事件处理模式和并发模式
- Java设计模式_观察者模式&事件处理机制
- 高效的事件处理模式和高效的并发模式
- Adapter模式在J2SE事件处理中的应用
- Adapter模式在J2SE事件处理中的应用
- Adapter模式在J2SE事件处理中的应用
- 数据结构 栈 C++
- Gabor特征
- 洛谷 P1967 货车运输
- HTML中meta标签的作用与使用
- Java 开发之:POI XLS和XLSX兼容解析及单元格数据转换工具代码
- 事件处理模式
- SVProgressHUD的基本使用
- 浅谈缓冲区溢出问题
- 算法导论二叉搜索树
- PAT (Advanced Level) Practise 1001. A+B Format (20)
- 搭建Nginx代理服务及配置
- 动态规划之背包问题
- 学习资料整理
- Android 中文API (33) —— Checkable