behavioral_patterns/mediator.rst
.. _mediator:
.. contents:: 目录
中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。
中介者模式包含如下角色:
.. image:: /_static/Mediator.jpg
.. image:: /_static/seq_Mediator.jpg
.. literalinclude:: /code/Mediator/main.cpp :language: cpp :linenos: :lines: 1- :emphasize-lines: 10-19
.. literalinclude:: /code/Mediator/ConcreteMediator.h :language: cpp :linenos: :lines: 1- :emphasize-lines: 23-26
.. literalinclude:: /code/Mediator/ConcreteMediator.cpp :language: cpp :linenos: :lines: 1- :emphasize-lines: 21-42
.. literalinclude:: /code/Mediator/ConcreteColleagueA.h :language: cpp :linenos: :lines: 1- :emphasize-lines: 20-21
.. literalinclude:: /code/Mediator/ConcreteColleagueA.cpp :language: cpp :linenos: :lines: 1- :emphasize-lines: 18-25
运行结果:
.. image:: /_static/Mediator_run.jpg
中介者模式可以使对象之间的关系数量急剧减少。
中介者承担两方面的职责:
.. image:: /_static/Mediator_eg.jpg
时序图
.. image:: /_static/seq_Mediator_eg.jpg
实例:虚拟聊天室
某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息,钻石会员(DiamondMember)既可以给其他会员发送文本信息,还可以发送图片信息。该聊天室可以对不雅字符进行过滤,如“日”等字符;还可以对发送的图片大小进行控制。用中介者模式设计该虚拟聊天室。
中介者模式的优点
中介者模式的缺点
在以下情况下可以使用中介者模式:
MVC架构中控制器
Controller 作为一种中介者,它负责控制视图对象View和模型对象Model之间的交互。如在Struts中,Action就可以作为JSP页面与业务对象之间的中介者。
中介者模式与迪米特法则
中介者模式与GUI开发