中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中不是特别常用的设计模式。
<?php
// | php设计模式 之中介者模式 |
// +----------------------------------------------------------------------+
// | 主要的功能就是在调用cd类中的change()方法的时候也会调用mp3类中的
// | save()方法,反之亦然
//
// | 例如以后再想添加一个MP4的类,新建一个MP4类以后,
// | 直接在 ZhoneJie 类初始化的时候 $this->sonLists [] = ‘MP4‘; 就可以了
// +----------------------------------------------------------------------+
class CD{
protected $mid;
public function __construct($zj=null){
$this->mid = $zj;
}
public function change(){
if($this->mid){
$this->mid->comChange($this);
}
$this->save();
}
public function save(){
echo "this is CDclass ! <br /><br /><br />";
}
}
class MP3{
private $mid;
public function __construct($zj=null){
$this->mid = $zj;
}
public function change(){
if($this->mid){
$this->mid->change();
}
$this->save();
}
public function save(){
echo "this is MP3class ! <br /><br /><br />";
}
}
//中间类
class ZhoneJie{
private $sonLists;
public function __construct(){
//等于是先注册,下一步的时候会排除一个,然后把剩余的都调用一遍
$this->sonLists [] = ‘CD‘;
$this->sonLists [] = ‘MP3‘;
}
public function comChange($baseObj,$parameter=array()){
//遍历初始化时候注册的 顾客
foreach($this->sonLists as $class){
//排除自身,然后剩余的其他顾客
if(!($baseObj instanceof $class)){
//把类名实例化成对象
$otherObj = new $class;
$otherObj->save($parameter);
}
}
}
}
调用:
//调用开始 $zj = new ZhoneJie; //new以后返回一个中介的对象,然后把这个对象传入到下面去,对象也可以当变量使用 $cd = new CD($zj); $cd->change();
原文:http://www.cnblogs.com/mr-amazing/p/4792466.html