概述:使各工具不须要显式地相互引用从而使其耦合疏松, 用一个中介工具来封装一系列的工具交互, 而且可以独立地改变它们之间的交互
利用中介者模式的场合和优缺陷
利用闭幕者模式的场合
1.一组定义良好的工具,现在要进行繁芜的通信。
2.定制一个分布在多个类中的行为,而又不想天生太多的子类。
可以看出,中介工具紧张是用来封装行为的,行为的参与者便是那些工具,但是通过中介者,这些工具不用相互知道。呵呵~~~
利用中介者模式的优点:
1.降落了系统工具之间的耦合性,使得工具易于独立的被复用。
2.提高系统的灵巧性,使得系统易于扩展和掩护。
利用中介者模式的缺陷:
中介者模式的缺陷是显而易见的,由于这个“中介“承担了较多的任务,以是一旦这个中介工具涌现了问题,那么全体系统就会受到重大的影响。
<?php
/
中介者模式
中介者抽象基类
/
abstract class Mediator{
public function send($message, $colleague){
}
}
<?php
/
同事基类
用于同事之间发送信息
/
abstract class Colleague{
public $mediator;
public function Colleague($mediator){
$this->mediator = $mediator;
}
public function send($message){
$this->mediator->send($message,$this);
}
public function notify($message){}
}
<?php
/
详细中介者
/
class ConcreteMediator extends Mediator{
private $colleagueA;
private $colleagueB;
public function send($message, $colleague){
if($colleague == $this->colleagueA){
$this->colleagueA->notify($message);
}else{
$this->colleagueB->notify($message);
}
}
public function set($colleagueA, $colleagueB){
$this->colleagueA = $colleagueA;
$this->colleagueB = $colleagueB;
}
}
<?php
/
详细同事类
/
class ColleagueA extends Colleague
{
/
public function __construct($mediator){
parent:: __construct($mediator);
}
/
public function notify($message)
{
echo \"大众ColleagueA Message is :\"大众.$message.\"大众<br/>\"大众;
}
}
<?php
/
详细同事类
/
class ColleagueB extends Colleague
{
public function notify($message)
{
echo \"大众ColleagueB Message is :\"大众.$message.\"大众<br/>\"大众;
}
}
<?php
/
中介者模式
/
public function actionMediator(){
Yii::import('ext.mediator.');
$objMediator = new ConcreteMediator();
$objCA = new ColleagueA($objMediator);
$objCB = new ColleagueB($objMediator);
$objMediator->set($objCA,$objCB);
$objCA->send(\公众去用饭\"大众);
$objCB->send(\"大众不去\"大众);
$objCA->send(\"大众那回家\公众);
$objCB->send(\"大众不回\"大众);
}