定义
中介者模式(Mediator Pattern)用一个中介对象来封装一系列的对象交互,属于行为型模式。中介者使各个对象不需要显示相互引用,减低了对象之间的耦合。
代码示例
现在要建立一个聊天室,聊天室内的用户分为VIP用户和普通用户,VIP用户的文字会加粗加大并且变色。Mediator 接口定义了中介者的职责,聊天室 Chatroom 充当了中介者的实例,User 接口定义了用户的行为,console 为真实输出的文字,send 调用了中介者来发送消息,中介者对双方的消息进行处理,再进行转发。
<?php
interface Mediator
{
public function send($message,$user);
}
class ChatRoom implements Mediator
{
public function send($message,$user)
{
if($user->level == 'vip'){
$message = "<b style='font-size: 20px;color: #f00;'>$message</b>";
}
$user->console($message);
}
}
interface User
{
public function send($message);
public function console($message);
}
class VipUser implements User
{
private $mediator;
public $level = 'vip';
public function __construct()
{
$this->mediator = new ChatRoom();
}
public function send($message)
{
$this->mediator->send($message,$this);
}
public function console($message)
{
echo $message;
}
}
class GeneralUser implements User
{
private $mediator;
public $level = 'general';
public function __construct()
{
$this->mediator = new ChatRoom();
}
public function send($message)
{
$this->mediator->send($message,$this);
}
public function console($message)
{
echo $message;
}
}
class DemoPattern
{
public function handle()
{
$vipUser = new VipUser();
$generalUser = new GeneralUser();
$vipUser->send('不服来斗法');
$generalUser->send('笑看装X');
}
}
$demoPattern = new DemoPattern();
$demoPattern->handle();
总结
中介者模式降低多对象直接交互的复杂性,减少了单个对象修改对系统的影响,但是交互对象很多时使用中介者模式会让中介类变的非常复杂,中介类的出错会直接影响整个系统。
网友评论