中介者模式

 

中介者模式(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");
View Code

 

posted @ 2017-01-09 14:35  _logan  阅读(124)  评论(0编辑  收藏  举报