1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?php interface Mediator { public function setUser(User $user); public function send($message, User $sendUser, User $receiveUser=null); } abstract class User { protected $mediator = null; public function setMediator(Mediator $mediator) { $mediator->setUser($this); $this->mediator = $mediator; } abstract public function send($message, User $receiveUser=null); } class QQMediator implements Mediator { private $users = array(); public function setUser(User $user) { $this->users[]=$user; } public function send($message, User $sendUser, User $receiveUser=null) { foreach ($this->users as $user) { if ($user === $sendUser) { continue; } if ($receiveUser !== null && $receiveUser !== $user) { continue; } echo $user->name . '接收到了来自' . $sendUser->name . '的信息:' . $message . '<br>'; } } } class User1 extends User { public $name = '用户1'; public function send($message, User $receiveUser=null) { $this->mediator->send($message, $this, $receiveUser); } } class User2 extends User { public $name = '用户2'; public function send($message, User $receiveUser=null) { $this->mediator->send($message, $this, $receiveUser); } } class User3 extends User { public $name = '用户3'; public function send($message, User $receiveUser=null) { $this->mediator->send($message, $this, $receiveUser); } } $mediator = new QQMediator(); $user1 = new User1(); $user1->setMediator($mediator); $user2 = new User2(); $user2->setMediator($mediator); $user3 = new User3(); $user3->setMediator($mediator); echo '群发:<br>'; $user1->send('你们好啊'); echo '<br>单发:<br>'; $user2->send('你好用户3', $user3); |