声明:本系列博客参考资料《大话设计模式》,作者程杰。

中介者模式用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

UML类图:

角色:

中介者接口(UnitedNations):在里面定义了各个同事之间相互交互所需要的方法。

具体的中介者实现对象(UnitedCommit):它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

同事类的定义(Country):通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,

具体的同事类(China):实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

核心代码:

<?php
/*** Created by PhpStorm.* User: Jiang* Date: 2015/6/9* Time: 21:15*///中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。
//同事类定义:比如,每个具体同事类都应该知道中介者对象,也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。//抽象国家
abstract class Country
{protected $mediator;public function __construct(UnitedNations $_mediator){$this->mediator = $_mediator;}
}//具体国家类
//美国
class USA extends Country
{function __construct(UnitedNations $mediator){parent::__construct($mediator);}//声明public function Declared($message){$this->mediator->Declared($message,$this);}//获得消息public function GetMessage($message){echo "美国获得对方消息:$message<br/>";}
}
//中国
class China extends Country
{public function __construct(UnitedNations $mediator){parent::__construct($mediator);}//声明public function  Declared($message){$this->mediator->Declared($message, $this);}//获得消息public function GetMessage($message){echo "中方获得对方消息:$message<br/>";}
}//抽象中介者
//抽象联合国机构
abstract class UnitedNations
{//声明public abstract function Declared($message,Country $colleague);
}//联合国机构
class UnitedCommit extends UnitedNations
{public $countryUsa;public $countryChina;//声明public function Declared($message, Country $colleague){if($colleague==$this->countryChina){$this->countryUsa->GetMessage($message);}else{$this->countryChina->GetMessage($message);}}
}

调用客户端测试代码:

header("Content-Type:text/html;charset=utf-8");
//--------------------------中介者模式-------------------
require_once "./Mediator/Mediator.php";//测试代码块
$UNSC = new UnitedCommit();
$c1 = new USA($UNSC);
$c2 = new China($UNSC);
$UNSC->countryChina = $c2;
$UNSC->countryUsa =$c1;
$c1->Declared("姚明的篮球打的就是好");
$c2->Declared("谢谢。");

适用场景:

1、如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介者模式

2、如果一个对象引用很多对象,并且跟这些对象交互,导致难以复用该对象

欢迎关注我的视频课程,地址如下,谢谢。

PHP面向对象设计模式

PHP设计模式——中介者模式相关推荐

  1. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  2. 7. 星际争霸之php设计模式--中介者模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  3. 【设计模式】Java设计模式 - 中介者模式

    Java设计模式 - 中介者模式

  4. 设计模式中介者模式-备忘录模式-状态模式

    设计模式 中介者模式 基本介绍 中介者模式使用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式属于行为模式,使 ...

  5. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  6. 大话设计模式—中介者模式

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. ...

  7. [设计模式]中介者模式之Events消息传递实现

    这篇文章比较短,修改自 写给大家看的设计模式之中介者中的例子 中介者模式的定义和目的自不必说, 参考上文即可. 本文针对实现方式做一个补充. 中介者模式增加了一个第三方对象(中介者)来控制两个对象(同 ...

  8. C++设计模式-中介者模式

    目录 基本概念 代码与实例 基本概念 中介者模式(Mediator)用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系. 下面 ...

  9. 学习设计模式 - 中介者模式

    中介者模式 一丶定义 定义一个中介者对象, 封装一系列对象的交互关系, 使得各对象不必显示的相互引用, 从而使其耦合松散, 而且可以独立的改变它们的交互 二丶理解 各对象显式地持有对方引用, 用于对象 ...

最新文章

  1. OpenCV+python:ROI与泛洪填充
  2. 德州学院计算机吴,计算机与信息学院举办“博士讲堂”系列讲座
  3. 使用Dependency Walkers来检查exe文件中缺少的dll
  4. 中科院计算机全国重点实验室,国家重点实验室
  5. iOS------App之间传递数据的几种方式
  6. iosid不足以修改问题_寻找合作伙伴的技巧足以与您合作
  7. 华为EMUI 11开启公测 这十款机型率先尝鲜
  8. Linux错误 libXext.so.6: cannot open shared object file
  9. sklearn学习笔记(一):数据预处理
  10. 如何将excel里的数据批量导入ACCESS,要用vb代码?
  11. Windows Server 2016 搭建 FTP服务
  12. 在Virtual Machine上运行Hello China的方法和工具
  13. Threejs实现天空盒,全景场景,地面草地
  14. python避障小车_基于深度学习的自动避障小车_7_代码说明
  15. 微信支付开发 服务商模式 签名错误
  16. 破解 --- apk文件解析
  17. 软件腐化的七个特征之复杂性、重复性、晦涩性(设计模式原则的反面) (《敏捷软件开发》读书总结第三篇)
  18. Spring中循环依赖的解决办法
  19. FFMEPG avs2 解码支持
  20. 精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

热门文章

  1. 虚拟机安装mysql5.7.20_虚拟机环境下CentOS 7 中安装Mysql 5.7.24(源码方式安装)
  2. 三菱st语言编程实例_C语言编程实例39
  3. hive内置函数_Hive Query生命周期 —— 钩子(Hook)函数篇
  4. 考计算机科学考研老师问,名师答疑:计算机专业考研复习6问!
  5. python后端程序例子_Python MR程序示例
  6. 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,分析起来就这些原因...
  7. java中EL表达式怎么获取网站的根目录
  8. eclipse 使用svn导入web项目
  9. android模拟器 opengl,android模拟器用到android.opengl.glsurfaceview报错怎么办
  10. 生物聚集细胞生物化学反应的组织者Biomolecular condensates: organizers of cellular biochemistry