中介者模式(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("有一套一室一厅的房子");
输出结果:
房主知道有人需要一套两室一厅的房子 买家知道房主有一套一室一厅的房子