定制事件 观察者模式

事件模型是观察者模式的一种类型

原理就是:对象在它生命周期里当一个特别状态出现的时候下可以发布事件,其他对象可以观察这个对象,等待那些特别状态出现的时候再做出反应。

观察者模式由两种类型对象组成:

subject  : 就是负责发布事件的

observer: 观察者就是负责观察subject  ,通过订阅那些事件

需要注意的是,subject  并不知道任何关于observer的信息,即使observer不存在它也能照常运行。但是observer是了解subject的,并且给它会发布的事件注册了event handle;

例如当你在处理一个Dom时,那个Dom元素就是subject,event handle就是observer。

事件在和Dom交互的时候经常使用,但事件模式也可以在non-Dom情况下通过定制事件来使用:原理就是通过创建一个对象来管理事件,允许其他对象去监听这些事件

举例:

function EventTarget(){

this.handlers = {};                     用来保存event  handle

}

EventTarget.prototype = {

constructor: EventTarget,

addHandler: function(type, handler){

if (typeof this.handlers[type] == “undefined”){            判断时候存在这个事件类型,存在就把event加到对应类型的数组里

this.handlers[type] = [];

}

this.handlers[type].push(handler);

},

fire: function(event){

if (!event.target){

event.target = this;

}

if (this.handlers[event.type] instanceof Array){                 查看对应事件类型的event handle,再一一调用这个handle

var handlers = this.handlers[event.type];

for (var i=0, len=handlers.length; i < len; i++){

handlers[i](event);

}

}

},

removeHandler: function(type, handler){

if (this.handlers[type] instanceof Array){

var handlers = this.handlers[type];

for (var i=0, len=handlers.length; i < len; i++){

if (handlers[i] === handler){

break;                                                      当找到需要删除的event handle就退出for循环,从事件回调数组中删除该event handle

}

}

handlers.splice(i, 1);

}

}

};

使用方法:

function handleMessage(event){

alert(“Message received: “ + event.message);

}

var target = new EventTarget();

target.addHandler(“message”, handleMessage);

target.fire({ type: “message”, message: “Hello world!”});

target.removeHandler(“message”, handleMessage);

时间: 2025-02-01 09:09:31

定制事件 观察者模式的相关文章

js 自定义事件观察者模式(发布/订阅)

/* * 示例: * Event.create("namespace1").listen('click', function(a){ * console.log(a); * }); * Event.create("namespace1").trigger("click", 1); */ window.myEvent = (function() { var global = this, Event, _default = 'default'; Ev

Cocos2d-x 3.X 事件分发机制

介绍 Cocos2d-X 3.X 引入了一种新的响应用户事件的机制. 涉及三个基本的方面: Event listeners 封装你的事件处理代码 Event dispatcher 向 listener 分发用户事件 Event 对象 包含关于事件的信息 为了响应事件,首先你要创建一个 EventListener,有五种不同的 EventListener. EventListenerTouch 响应触控事件 EventListenerKeyboard 响应键盘事件 EventListenerAcc

创建自定义的事件接收器-Semantic Logging

创建自定义的事件接收器 Semantic Logging Application Block提供了大量的事件接收器,如Rolling Flat File,SQL Database, 云存储接收器等.这些接收器都实现了IObservable<EventEntry>接口. 有时这些并不能很好的满足客户需求,这时就需要定制事件接收器,比如邮件接收器.短信接收器等. 下面介绍以下如何定制邮件接收器,在特定的事件发生时自动发送邮件给指定的客户. 本文介绍了以下主题: 创建自定义接收器 在进程内使用自定义

UNITY_委托和事件

UNITY_委托和事件 参考资料: Unity3D脚本编程-使用C#语言开发跨平台游戏-陈嘉栋 观察者模式 主题(Subject)管理某些数据,当主题的数据发生改变时,会通知已经注册(Register)的观察者(Observer),而这些已经注册的观察者会受到数据改变的通知并作出相应反应. 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新. Unity提供的机制:SendMessage()和BroadcastMessage() 缺点: 过于依赖反射

Tapable 0.2.8 入门

[原文:Tapable 0.2.8 入门] tapable是webpack的核心框架(4.0以上版本的API已经发生了变化),是一个基于事件流的框架,或者叫做发布订阅模式,或观察者模式,webpack的整个生命周期及其开放的自定义插件系统都离不开tapable的支持,研究其运行原理是阅读webpack源代码的第一步. Tapable是一个小型库,允许你添加和应用插件到一个javascript模块.它可以被继承或混入其他模块.除可以定制事件发射和操作,还可以通过回调参数访问事件的“排放者”或“生产

Tkinter类之窗口部件类

Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下: 窗口部件及说明: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件. Checkbutton:代表一个变量,它有两个不同的值.点击这个按钮将会在这两个值间切换. Entry:文本输入域. Frame:一个容器窗口部件.帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组

Tkinter组件

Tkinter 组件 Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用.这些控件通常被称为控件或者部件. 目前有15种Tkinter的部件.我们提出这些部件以及一个简短的介绍,在下面的表: 控件 描述 Button 按钮控件:在程序中显示按钮. Canvas 画布控件:显示图形元素如线条或文本 Checkbutton 多选框控件:用于在程序中提供多项选择框 Entry 输入控件:用于显示简单的文本内容 Frame 框架控件:在屏幕上显示一个矩形区域,多用来作为容器 L

c#之监控文件结构

如果需要知道修改文件或目录的时间,可以通过FileSystemWatcher类,这个类提供了一下应用程序可以捕获的事件,应用程序可以对事件作出响应. 使用FileSystemWatcher非常简单,首先必须设置一些属性,指定监控的位置.内容以及引发应用程序要处理事件的时间,然后给FileSystemWatcher提供定制事件处理程序的地址.当事件发生时,FileSystemWatcher就调用这些属性,然后打开FileSystemWatcher,等待事件. 1.在启用FileSystemWatc

【转】解读Qt 事件处理机制(上篇)

[转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分发.接受和处理事件. 本篇来介绍Qt 事件处理机制 .深入了解事件处理系统对于每个学习Qt人来说非常重要,可以说,Qt是以事件驱动的UI工具集. 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制. 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent.