事件处理模型:

组件(事件源)不处理自己的事件,而是将事件处理托付给外部的处理实体(监听器,

这样的事件处理模型称为事件的 授权处理模型。

不同的事件,能够交由不同类型的监听器去处理

事件源:

提供订阅与取消监听者的方法,并负责维护监听者列表,发送事件给监听者

监听者:

每一个监听者实现接口来接收事件,并负责从事件源订阅与取消订阅

图示:

demo

事件源:

Context:

package com.demo.event;import java.util.ArrayList;
import java.util.List;public class Context {private static List<Listener> list=new ArrayList<Listener>();public static void addListener(Listener listener){list.add(listener);}public static void removeListener(Listener listener){list.remove(listener);}public static void sendNotification(Event event){for(Listener listener:list){listener.onChange(event);}}
}

监听者:

Listener

package com.demo.event;public interface Listener {public void onChange(Event event);
}

MyListener

package com.demo.event;public class MyListener implements Listener {@Overridepublic void onChange(Event event) {switch(event.getType()){case Event.INSTALLED:System.out.println("do install...");break;case Event.STARTED :System.out.println("do started...");break;case Event.RESOLVED :System.out.println("do resolved...");break;case Event.STOPPED :System.out.println("do stopped...");break;case Event.UNRESOLVED :System.out.println("do unresolved...");break;case Event.UNINSTALLED :System.out.println("do uninstalled...");break;default:throw new IllegalArgumentException();}}}

事件:

package com.demo.event;public class Event {public static final int INSTALLED =1; public static final int STARTED =2; public static final int RESOLVED  =3; public static final int STOPPED =4; public static final int UNRESOLVED  =5; public static final int UNINSTALLED   =6;private int type ;private Object source ;public Event(int type, Object source) {this.type = type;this.source = source;}public int getType() {return type;}public Object getSource() {return source;}
}

測试:

package com.demo.event;public class EventTest {/*** @param args*/public static void main(String[] args) {Listener listener=new MyListener();//加入监听者Context.addListener(listener);//模拟bundle安装完毕事件触发Context.sendNotification(new Event(Event.INSTALLED, new MyBundle()));}}

设计模式之监听器模式相关推荐

  1. 软件设计模式-行为型模式

    行为型模式 行为型模式是对在不同的对象之间划分责任和算法的抽象化 通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互.在系统运行时,对象并不是孤立的,他们可以通过相 ...

  2. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  3. 一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式

    [网络配图] 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.设计 ...

  4. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  5. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  6. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  7. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  8. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  9. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

最新文章

  1. 华为4G路由器成软银快速部署宽带业务新利器
  2. numpy归一化_使用numpy 高效实现K-Means聚类
  3. 【mysql】配置 选项文件
  4. 向量几何在游戏编程中的使用系列二之2-D物体间的碰撞响应
  5. 会计电算化的重要物质基础计算机和,湖北工业大学工程技术学院会计电算化管理办法...
  6. mysql dml ddl优先级_MYSQL入门操作和常规DML、DDL、DQL使用
  7. python的with as语句_python with (as)语句
  8. unity 自动生成脚本
  9. 台式计算机配置清单4500,4500组装电脑配置清单
  10. 如何裁剪动图的边框?教你一键在线裁剪动图
  11. Keras中那些学习率衰减策略
  12. I/O模型(同步、非同步、阻塞、非阻塞)总结
  13. 在WordPress中重新排序博客文章的4种简单方法(循序渐进)
  14. 【分享】超级菜鸟另类玩swf反汇编
  15. Android开发学习之Intent具体解释
  16. Android 获取Usb设备类型
  17. LeetCode hot-100 简单and中等难度,91-100.
  18. Windows Media Encode 9简介及SDK
  19. 一缕黑暗中的火光-----------类图--------------优雅的建模语言
  20. MM买裤子杀价全过程

热门文章

  1. 批量插入/修改网页代码的asp脚本
  2. linux下命令行安装anaconda3+pytorch+fastai
  3. CentOS 7 Galera Cluster安装全攻略
  4. Ansible第一篇:基础
  5. C# 给PDF添加图片背景
  6. 配置ubuntu - tftp server服务器步骤
  7. XenDesktop中无法删除虚拟机
  8. 高效程序猿之(四)VS2010其他技巧
  9. Java Swing 皮肤
  10. 如何迅速成为Java高手[Tomjava原创]