Mediator
かなり消化不足だけどとりあえず残しておく。結城センセイの本にあるMediatorパターンが一番わかりやすそうだけれどJavaで実装はしたことないからJavaScriptとブラウザを使おうかどうか思案中。。
<?php class User { private $chatroom; private $name; public function __construct($name){ $this->name = $name; } public function getName(){ return $this->name; } public function setChatroom(Chatroom $value){ $this->chatroom = $value; } public function sendMessage($to, $message){ $this->chatroom->sendMessage($this->name, $to, $message); } public function receiveMessage($from, $message){ printf('<font color="008800">%sさんから%sさんへ</font>: %s<hr>', $from, $this->getName(), $message); } } class Chatroom { private $users = array(); public function login(User $user){ $user->setChatroom($this); if(!array_key_exists($user->getName(), $this->users)){ $this->users[$user->getName()] = $user; printf('<font color="#0000dd#>%sさんが入室しました</font><hr>', $user->getName()); } } public function sendMessage($from, $to, $message){ if(array_key_exists($to, $this->users)){ $this->users[$to]->receiveMessage($from, $message); } else { printf('<font color="#dd0000">%sさんは入室していないようです</font><hr>', $to); } } } $chatroom = new Chatroom(); $sasaki = new User('佐々木'); $suzuki = new User('鈴木'); $chatroom->login($sasaki); $chatroom->login($suzuki); $sasaki->sendMessage('鈴木', 'yorosiku'); $suzuki->sendMessage('sasaki', 'arigatou'); ?>