js设计模式(中介-Mediator)

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

中介设计模式

另一个设计模式,正如其名称所暗示的那样,是中介,起着调解作用。这种模式为一组对象提供了一个中心控制点。它被大量用于状态管理。当其中一个对象更改其属性的状态时,中介可以轻松地将其广播给其他对象。

下面是一个简单的例子,说明 Mediator 设计模式如何提供帮助:

var Participant = function (name) {
    this.name = name;
    this.chatroom = null;
}
//define a Itprototype for participants with receive and send implementation
var Talkie = function () {
    var participants = {};
    return {
       register: function (participant) {
            participants[participant.name] = participant;
            participant.talkie = this;
        },
        send: function (message, from, to) {
            if (to) {                      // single message
                to.receive(message, from);
            } else {                       // broadcast message
                for (key in participants) {
                    if (participants[key] !== from) {
                        participants[key].receive(message, from);
                    }
                }
            }
        }
    };
};

function letsTalk() {
    var A = new Participant("A");
    var B = new Participant("B");
    var C = new Participant("C");
    var D = new Participant("D");
    var talkie = new Talkie();
    talkie.register(A);
    talkie.register(B);
    talkie.register(C);
    talkie.register(D);
    A.send("I love you B.");
    B.send("No need to broadcast", A);
    C.send("Ha, I heard that!");
    D.send("C, do you have something to say?", C);
}

总结:

我们的中介者在此模式中起着一个中心点的角色,它负责将参与者储存起来,然后将参与者的信息转发出去。实现了一个单播和多播的功能。

 

版权声明:著作权归作者所有。

相关推荐

Java 9模块声明中requires and requires transitive的区别

可读性(Readability)首先要理解模块的可读性module bar{     requires drink; } bar requires drink意味着:bar模块强制要求存在drink模块,这称为可靠配置。bar模块可以读入drink模块的文件,这称为可读性。bar模块可以访问drink模块的代码,这称为

[译]Android UI设计与样式——dp和sp

朋友们,最近我一直在做一些Android UI设计和样式的培训课程。 我想和更多观众分享。 这是我的第一个android ui设计和样式教程。 我将在这个主题上写更多的内容。 那么现在开始吧...DP, SP & Pixels作为Android开发人员,我们始终希望我们的UI设计与设备无关。 

设置Log4j显示的日期格式

一个简单的log4j配置如下:log4j.rootLogger=DEBUG, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.Patt

CSS设置placeholder字体样式

CSS标准里是没有直接对placeholder设置样式的选择器,这里主要是通过各个浏览器的兼容前缀来给输入框的placeholder设置字体样式。/* WebKit browsers*/  input::-webkit-input-placeholder {    color:#999;     font-s

Jackson设置JSON的日期格式

Jackson使用ObjectMapper解析JSON数据,如果需要设置JSON日期格式,可以使用ObjectMapper的setDateFormat方法设置:ObjectMapper om = new ObjectMapper(); om.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false); o

ES6简化版的JavaScript中间件模式的实现

JavaScript中间件模式的目的是分解前端业务逻辑,通过next方法层层传递给下一个业务。比较经典的是express和koa。这是使用ES6实现的一个简版的中间件模式:class Middleware { use(fn) { this.go = (stack => next => stack(fn.bind(this, next.bind(this))))(this.go)

Pandas统计dataframe列中为NaN的行数

这分为两种情况:缺少值NaN和字符串NaN。缺少值NaNdf = pd.DataFrame({'value':[np.nan, np.nan, 1, 5, 7]})print (df) value0 NaN1 NaN2 1.03 5.04 7.0count = df['value'].isna().sum()#或者 count = df['valu

Java 14新特性:instanceof的模式匹配

Java中instanceof是用来判断对象的类型是否是目标类型。如果是返回true,不是返回false。在Java 14之前,示例如下:if (obj instanceof String) { String str = (String) obj; .. str.contains(..) .. }else{ str = .... }obj instanceof Stri

模式结构

模式的结构一般分为是三个部分:需求(Forces)结果上下文(Resulting Context)相关模式(Related Patterns)说明如下:需求是必须解决的问题,它描述了必须解决的问题和围绕这个特定问题的上下文环境。需求有时候会发生冲突,必须予以取舍,选择最重要的需求来解决。结果上下文是采用模式后可能带来的后果,它描述了采用这个模式后的结果,它包含三个部分: 好处,弊端和问题。相关模式

领域驱动设计——如何发布领域事件

领域事件(Domain Event)是域驱动设计的构建块之一,它通常是一个以过去时命名的不可变数据容器类。如:public class OrderPlaced { private Order order; public OrderPlaced(Order order){ this.order = order; } public Order getOrder()