标签:
<?php /** * 中介者模式 * * 用一个中介对象来封装一系列的对象交互 * 使各对象不需要显式地相互引用从而使其耦合松散 * 而且可以独立地改变它们之间的交互 */ abstract class Mediator { abstract public function send($message,$colleague); } abstract class Colleague { private $_mediator = null; public function __construct($mediator) { $this->_mediator = $mediator; } public function send($message) { $this->_mediator->send($message,$this); } abstract public function notify($message); } //新建对象,并把它作为参数给Colleague1或者Colleague2 //所以Colleague1或者Colleague2就有了除本身外的,还有这里的方法 //还有继承于Mediator方法,还有它本身继承于Colleague的方法 class ConcreteMediator extends Mediator { private $_colleague1 = null; private $_colleague2 = null; // public function send($message,$colleague) { if($colleague == $this->_colleague1) { $this->_colleague1->notify($message); } else { $this->_colleague2->notify($message); } } //给它的参数赋一个对象 public function set($colleague1,$colleague2) { $this->_colleague1 = $colleague1; $this->_colleague2 = $colleague2; } } class Colleague1 extends Colleague { public function notify($message) { echo "Colleague1 Message is :".$message."<br/>"; } } class Colleague2 extends Colleague { public function notify($message) { echo "Colleague2 Message is :".$message."<br/>"; } } // $objMediator = new ConcreteMediator(); $objC1 = new Colleague1($objMediator); $objC2 = new Colleague2($objMediator); $objMediator->set($objC1,$objC2); $objC1->send("to c2 from c1"); $objC2->send("to c1 from c2");
标签:
原文地址:http://www.cnblogs.com/jiufen/p/5007523.html