概述:使各工具不须要显式地相互引用从而使其耦合疏松, 用一个中介工具来封装一系列的工具交互, 而且可以独立地改变它们之间的交互

利用中介者模式的场合和优缺陷

利用闭幕者模式的场合

中介者模式phpPHP设计模式之中介者模式 Angular

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(\"大众不回\"大众);

}