经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Matlab中介者模式 - sw-lab
来源:cnblogs  作者:sw-lab  时间:2019/6/3 9:01:14  对本文有异议

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

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

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

  1. classdef Mediator < handle
  2. properties
  3. userlist = User.empty();
  4. end
  5. methods(Abstract)
  6. sendToAll(~,~);
  7. sendToPerson(~,~,~);
  8. join(~,~);
  9. leave(~,~);
  10. end
  11. end

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

  1. classdef ChatPlatform < Mediator
  2. methods
  3. function sendToAll(obj,msg)
  4. for i=1:length(obj.userlist)
  5. obj.userlist(i).accept(msg);
  6. end
  7. end
  8. function sendToPerson(obj,name,msg)
  9. user = obj.userlist([obj.userlist.name] == name);
  10. for i = 1:length(user)
  11. user.accept(msg);
  12. end
  13. end
  14. function join(obj,user)
  15. obj.userlist(end + 1) = user;
  16. end
  17. function leave(obj,user)
  18. obj.userlist = obj.userlist(obj.userlist ~= user);
  19. end
  20. end
  21. end

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

  1. classdef User < handle & matlab.mixin.Heterogeneous
  2. properties
  3. mediator
  4. name
  5. end
  6. methods
  7. function obj = User(name, mediator)
  8. obj.name = name;
  9. obj.mediator = mediator;
  10. end
  11. function sendToAll(obj,msg)
  12. obj.mediator.sendToAll(msg);
  13. end
  14. function sendToPerson(obj,name,msg)
  15. obj.mediator.sendToPerson(name,msg);
  16. end
  17. function join(obj)
  18. obj.mediator.join(obj);
  19. end
  20. function leave(obj)
  21. obj.mediator.leave(obj);
  22. end
  23. end
  24. methods(Abstract)
  25. accept(~,~);
  26. end
  27. end

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

  1. classdef NormalUser < User
  2. methods
  3. function obj = NormalUser(name, mediator)
  4. obj = obj@User(name, mediator);
  5. end
  6. function accept(obj,msg)
  7. disp("[" + datestr(now) + "]" + obj.name + " accepted msg: " + msg);
  8. end
  9. end
  10. end

测试代码:

  1. chatPlatform = ChatPlatform();
  2. a = NormalUser("A", chatPlatform);
  3. b = NormalUser("B", chatPlatform);
  4. c = NormalUser("C", chatPlatform);
  5. a.join();
  6. b.join();
  7. c.join();
  8. disp("-----------------A群发送消息------------------");
  9. a.sendToAll("A:大家听得到吗?");
  10. disp("-----------------A给B私发消息------------------");
  11. a.sendToPerson("B", "A:B,我只想和你说");
  12. disp("-----------------B给A私发消息------------------");
  13. b.sendToPerson("A","B:可以,请说" );
  14. disp("-----------------A离开聊天室------------------");
  15. a.leave();
  16. disp("-----------------B群发送消息------------------");
  17. 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

 

原文链接:http://www.cnblogs.com/usaddew/p/10960584.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号