中介者模式属于行为型模式
概述:使各对象不需要显式地相互引用从而使其耦合松散, 用一个中介对象来封装一系列的对象交互, 而且可以独立地改变它们之间的交互
使用中介者模式的场合和优缺点
使用终结者模式的场合
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("不回");
}