简体   繁体   English

javascript mediator vs观察者

[英]javascript mediator vs observer

First I want to say I have googled javascript mediator vs observer and read almost ten links. 首先,我想说我已经谷歌搜索了javascript mediator vs observer并阅读了近十个链接。

Also I search in statckoverflow and I got this Mediator Vs Observer Object-Oriented Design Patterns and mediator-vs-observer . 我也在statckoverflow中搜索,我得到了这个Mediator Vs Observer面向对象的设计模式mediator-vs-observer

However I still do not have clear understand about the difference between them. 但是我仍然没有清楚地了解它们之间的区别。

So I wonder if someone can explain them more clearly? 所以我想知道是否有人可以更清楚地解释它们?

Maybe a live example. 也许是一个实例。 :) :)

Thanks. 谢谢。


I tried to create an example, is this a pattern of mediator? 我试图创建一个例子,这是一个中介模式吗?

code: 码:

var EventMediator = {
    publish: function (target, message) {
        var args = Array.prototype.slice.call(arguments, 2);
        var msgs = target.messages || [];
        for (var i = 0; i < msgs.length; i++) {
            var msg = msgs[i];
            msg.callback.apply(msg.context, args);
        }
    },
    register: function (target, message, fn) {
        target.messages = target.messages || [];
        target.messages.push({
            context: target,
            callback: fn
        });
    }
};

var t1 = {name: 'kk'};
var t2 = {name: 'gg'};

EventMediator.register(t1, "nameChanged", function () {
    console.info("t1 name chagned");
});
EventMediator.publish(t1, "nameChanged");

Here I want to know if the Mediator should know about the exist of the object who trigger the message? 在这里,我想知道Mediator是否应该知道触发消息的对象的存在?

Observer pattern : the observed object manages its own list of observers (aka listeners) which must be notified when a certain event happens. 观察者模式 :观察对象管理自己的观察者列表 (也称为侦听器),当某个事件发生时必须通知它们。

Mediator pattern : the observed object is not aware of the list of its observers, there is an external entity that makes the mapping between observed objects and observers. 中介模式 :观察对象不知道其观察者的列表,有一个外部实体在观察对象和观察者之间进行映射。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM