可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

PHP设计模式之中介者模式

中介者模式属于行为型模式

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

使用中介者模式的场合和优缺点

使用终结者模式的场合

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

}

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言