事件订阅分发模型

Posted 晴天的故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件订阅分发模型相关的知识,希望对你有一定的参考价值。

最近看了下各位大师写的事件订阅分发的模型很有感触,js果然强大到行如流水,下面这段模型摘自汤姆大叔的深入理解javascript,非常感谢原作者

原文链接:http://www.sxrczx.com/docs/js/2305513.html

 

function Event(name) {
            var handlers = [];

            this.getName = function () {
                return name;
            };

            this.addHandler = function (handler) {
                handlers.push(handler);
            };

            this.removeHandler = function (handler) {
                for (var i = 0; i < handlers.length; i++) {
                    if (handlers[i] == handler) {
                        handlers.splice(i, 1);
                        break;
                    }
                }
            };

            this.fire = function (eventArgs) {
                handlers.forEach(function (h) {
                    h(eventArgs);
                });
            };
        }

        function EventAggregator() {
            var events = [];

            function getEvent(eventName) {
                return $.grep(events, function (event) {
                    return event.getName() === eventName;
                })[0];
            }

            this.publish = function (eventName, eventArgs) {
                var event = getEvent(eventName);

                if (!event) {
                    event = new Event(eventName);
                    events.push(event);
                }
                event.fire(eventArgs);
            };

            this.subscribe = function (eventName, handler) {
                var event = getEvent(eventName);

                if (!event) {
                    event = new Event(eventName);
                    events.push(event);
                }

                event.addHandler(handler);
            };
        }

 

以上是关于事件订阅分发模型的主要内容,如果未能解决你的问题,请参考以下文章

Android 事件分发机制分析及源码详解

Android 事件分发机制分析及源码详解

异步编程模型演绎

片段实例中带有 Otto 事件总线的 IllegalArgumentException

java事件机制(订阅/消费模型)/观察者模式 : EventObject,EventListener和Source

EventBus3.0源码解析