中介者模式(Mediator)
属于行为型模式,从字面意思理解起来也不难,相信中介每个人都会接触到,比如租房会碰到房产中介,买车会碰到汽车中介,包括我们经常用的淘宝也类似一个大中介。
那么所谓的中介就是提供一个第三方对象,使交互趋于简单化。
用最简单的例子去理解,就是两个对象想要交互,但是两者自己不去直接发生交互,而是通过中介者将两者的进行交互。
那么所谓的中介就是提供一个第三方对象,使交互趋于简单化。
用最简单的例子去理解,就是两个对象想要交互,但是两者自己不去直接发生交互,而是通过中介者将两者的进行交互。
如下模拟房产中介交互的过程:
- 买主需要一个两室一厅的房子
- 房主有一个一室一厅的房子
- 买主和房主通过中介者相互知道对方的情况。
<?php // 抽象对象类 abstract Class Obejct { /** * 中介者 * @var object */ protected $mediator; /** * 构造方法 * @access public * @param object $_mediator 中介者对象 */ function __construct(ConcreteMediator $_mediator) { $this->mediator = $_mediator; } } // 买家对象类 Class Buyer extends Obejct { /** * 构造方法 * @access public * @param object $mediator 中介者对象 */ function __construct(ConcreteMediator $mediator) { parent::__construct($mediator); } /** * 交易函数 * @access public * @param string $message 房源信息 */ public function Deal($message) { $this->mediator->Deal($message, $this); } /** * 信息函数 * @access public * @param string $message 房源信息 */ public function GetMessage($message) { echo "买家知道房主{$message}<br/>"; } } // 房主对象类 Class Householder extends Obejct { /** * 构造函数 * @access public * @param object $mediator 中介者 */ function __construct(ConcreteMediator $mediator) { parent::__construct($mediator); } /** * 交易函数 * @access public * @param string $message 房源信息 */ public function Deal($message) { $this->mediator->Deal($message, $this); } /** * 交易函数 * @access public * @param string $message 房源信息 */ public function GetMessage($message) { echo "房主知道有人{$message}<br/>"; } } // 抽象中介者对象 abstract Class Mediator { /** * 交易函数 * @access public * @param string $message 房源信息 * @param obejct $colleague 具体对象 */ public abstract function Deal($message, Obejct $colleague); } // 具体中介者对象 Class ConcreteMediator extends Mediator { /** * 买主 * @var object */ public $Buyer; /** * 房主 * @var object */ public $Householder; /** * 交易函数 * @access public * @param string $message 房源信息 * @param obejct $colleague 具体对象 */ public function Deal($message, Obejct $colleague) { if($colleague == $this->Householder) { $this->Buyer->GetMessage($message); } else { $this->Householder->GetMessage($message); } } }
<?php header("Content-Type:text/html;charset=utf-8"); require_once "Mediator.php"; // 中介者模式 index.php echo "<pre>"; // 实例化具体中介类 $Mediator = new ConcreteMediator(); // 创建 买主对象类 $Buyer = new Buyer($Mediator); // 创建 房主对象类 $Householder = new Householder($Mediator); $Mediator->Buyer = $Buyer; $Mediator->Householder = $Householder; // 买主想买一套两室一厅的房子 $Buyer->Deal("需要一套两室一厅的房子"); // 可是房主有一套一室一厅的房子 $Householder->Deal("有一套一室一厅的房子");
输出结果:
房主知道有人需要一套两室一厅的房子 买家知道房主有一套一室一厅的房子