Matlab中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。想象一个乱糟糟的开发小组的工作状态,组员之间虽然在一起协同工作,但是意见难以统一,总是相互指挥,导致工作进度滞后。这时候,就需要一个仲裁者。所有的组员将自己的情况汇报给仲裁者,仲裁者会从团队的整体考虑,然后下达指令。仲裁者负责统一大家的意见。这样,团队的交流过程就变成了组员向仲裁者报告,仲裁者向组员下达指令的形式,而组员之间不再询问和沟通,这就是Mediator模式。

本文根据https://blog.csdn.net/niunai112/article/details/79913833所给的实例,用Matlab语言实现中介者模式

Mediator.m (抽象的中介者类)

classdef Mediator < handle
    properties
        userlist = User.empty();
    end
    methods(Abstract)
        sendToAll(~,~);
        sendToPerson(~,~,~);
        join(~,~);
        leave(~,~);
    end
end

ChatPlatform.m (具体的中介者类,ConcreteMediator)

classdef ChatPlatform < Mediator
    methods
        function sendToAll(obj,msg)
           for i=1:length(obj.userlist)
               obj.userlist(i).accept(msg);
           end
        end
        function sendToPerson(obj,name,msg)
            user = obj.userlist([obj.userlist.name] == name);
            for i = 1:length(user)
                user.accept(msg);
            end
        end
        function join(obj,user)
            obj.userlist(end + 1) = user;
        end
        function leave(obj,user)
            obj.userlist = obj.userlist(obj.userlist ~= user);
        end
    end
end

User.m (抽象的同事类, Colleague)

classdef User < handle & matlab.mixin.Heterogeneous
    properties
        mediator
        name
    end

    methods
        function obj = User(name, mediator)
            obj.name = name;
            obj.mediator = mediator;
        end
        function sendToAll(obj,msg)
            obj.mediator.sendToAll(msg);
        end
        function sendToPerson(obj,name,msg)
            obj.mediator.sendToPerson(name,msg);
        end
        function join(obj)
            obj.mediator.join(obj);
        end
        function leave(obj)
            obj.mediator.leave(obj);
        end
    end
    methods(Abstract)
        accept(~,~);
    end
end

NormalUser.m (具体的同事类, ConcreteColleague)

classdef NormalUser < User
    methods
        function obj = NormalUser(name, mediator)
            obj = obj@User(name, mediator);
        end
        function accept(obj,msg)
            disp("[" + datestr(now) + "]" + obj.name + " accepted msg: " + msg);
        end
    end
end

测试代码:

chatPlatform = ChatPlatform();
a = NormalUser("A", chatPlatform);
b = NormalUser("B", chatPlatform);
c = NormalUser("C", chatPlatform);
a.join();
b.join();
c.join();
disp("-----------------A群发送消息------------------");
a.sendToAll("A:大家听得到吗?");
disp("-----------------A给B私发消息------------------");
a.sendToPerson("B", "A:B,我只想和你说");
disp("-----------------B给A私发消息------------------");
b.sendToPerson("A","B:可以,请说" );
disp("-----------------A离开聊天室------------------");
a.leave();
disp("-----------------B群发送消息------------------");
b.sendToAll("B:A能听到吗");

参考资料

https://www.runoob.com/design-pattern/mediator-pattern.html
https://blog.csdn.net/qq_39384184/article/details/80631275

https://blog.csdn.net/niunai112/article/details/79913833

(0)

相关推荐

  • Matlab桥接模式

    桥接模式(Bridge)是一种结构型设计模式.它是用组合关系代替继承关系来实现,可以处理多维度变化的场景(https://blog.csdn.net/qq_31156277/article/detai ...

  • Matlab代理模式

    代理模式(Proxy)就是给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用.代理模式和装饰模式非常类似,但最主要的区别是代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行.本 ...

  • 野火指南者开发板移植 lvgl 库

    前言 由于近期要做一个装置 ,想着把装置做的好看一点,就打算使用 GUI 来做一个信息的相关显示,之前听说过一款比较轻量级的图形库,也就是 lvgl,手头又正好有一块搭配屏幕的野火指南者开发板,单片机 ...

  • Matlab状态模式

    状态模式就是将状态的条件判断语句转化成其函数重写形式,利用了面向对象语言的多态性,本文根据https://blog.csdn.net/lm324114/article/details/78819602 ...

  • Matlab函数装饰器

    info.m function result_func= info(msg) function res_func =wrap(func) function varargout = inner_wrap ...

  • 还在用C编写LVGL上的画面,何不试试Python? (2)

    在上一篇中,小编为大家简单介绍了LVGL库,并且介绍了如何实现lvgl和MicroPython的绑定,使得lvgl以MicroPython模块的形式供用户通过Python进行调用,方便开发. 本篇小编 ...

  • Matlab混入模式(Mixin)

    Mixin是一种类,这种类包含了其他类要使用的特性方法,但不必充当其他类的父类.Matlab无疑是支持多继承的.我们可以利用 Matlab 的这种特性,实现一种叫做 Mixin 的类.MixIn的目的 ...

  • 最新票据中介套利模式揭秘

    陈亚楠 |2018-12-18 21:2832108 2018年下半年以来,市场利率整体下行,部分以实体公司为载体的票据中介,利用银行体系信贷额度宽松.存贴价格倒挂时机,业务不断创新,在"收 ...

  • PHP设计模式之中介者模式

    PHP设计模式之中介者模式 上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介.大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈.既然需要长期的租房,那么因为工作或 ...

  • [PHP小课堂]PHP设计模式之中介者模式

    [PHP小课堂]PHP设计模式之中介者模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 空白直播间 |中介加盟模式的开创者——21世纪不动产

    part1. 近两年,中国经纪行业最显著的变化之一,是加盟模式在全国各地兴起与发展. 对于加盟这一现象级的商业模式,我们该如何理解它的本质? 国内外不同特许品牌之间差异化的竞争策略与价值优势分别是什么 ...

  • 行为型模式之中介者模式

    在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",它要求每个对象都必须知道它需要交互的对象. 如果把这种"网状结构"改为& ...

  • MediatorPattern中介者模式

    中介者模式 1.定义 使用一个中介对象封装一系列的对象交互,中介者使用对象不需要显式的相互作用,从而实降现低耦合度,且可以独立改变被封装的一些列对象之间的交互. 中介者模式也叫做调停者模式:对象之间的 ...

  • 无废话设计模式(17)行为型模式--中介者模式

    0-前言 中介者模式定义(Mediator): 用一个中介对象来封装一系列的对象交互. 中介者对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. 1-实现 1-1.简单UM ...

  • 中介者模式

    一.中介者模式介绍 1.定义与类型 定义一个封装一组对象如何交互的对象 通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互 类型:行为型 2.适用场景 系统中对象之间存在复杂的引用关系 ...

  • 图解Java设计模式之中介者模式

    智能家庭项目 传统方案解决智能家庭管理问题 中介者模式基本介绍 中介者模式的原理类图 中介者模式 - 智能家庭的操作流程 中介者模式的注意事项和细节 智能家庭项目 1)智能家庭包括各种设备,闹钟.咖啡 ...