中介者模式
中介者模式(Mediator)就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 对于中介对象而言,所有相互交互的对象,都视为同事类,中介对象就是用来维护各个同事对象之间的关系,所有的同事类都只和中介对象交互,也就是说,中介对象是需要知道所有的同事对象的。
当一个同事对象自身发生变化时,它是不知道会对其他同事对象产生什么影响,它只需要通知中介对象,“我发生变化了”,中介对象会去和其他同事对象进行交互的。
这样一来,同事对象之间的依赖就没有了。
有了中介者之后,所有的交互都封装在了中介对象里面,各个对象只需要关心自己能做什么就行,不需要再关心做了之后会对其他对象产生什么影响,也就是无需再维护这些关系了。
1 <?php 2 3 /** 4 * 我们通过聊天室实例来演示中介者模式。 5 * 实例中,多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。 6 * 我们将创建两个类 ChatRoom 和 User。User 对象使用 ChatRoom 方法来分享他们的消息。 7 * 8 * 所有的同事类都与中介者有交互 9 */ 10 11 class ChatRoom 12 { 13 public static function showMsg(User $user, $msg) 14 { 15 echo "<br/>", $user->getName()," __ ", $msg, ' __ ', date("Y-m-d H:i:s", time()); 16 } 17 } 18 19 20 class User 21 { 22 private $_name; 23 24 public function __construct($name) 25 { 26 $this->_name = $name; 27 } 28 29 public function getName() 30 { 31 return $this->_name; 32 } 33 34 public function sendMsg($msg) 35 { 36 ChatRoom::showMsg($this, $msg); 37 } 38 } 39 40 41 42 43 $u1 = new User("A"); 44 $u2 = new User("B"); 45 46 $u1->sendMsg("I'm A"); 47 $u2->sendMsg("I'm B");