本文目录导读:

是的,PHP中介者模式(Mediator Pattern)正是用于协调对象之间的交互,减少它们之间的直接耦合,让我详细解释一下:
中介者模式的核心作用
目的:定义一个中介对象来封装一组对象之间的交互,使这些对象不需要显式地相互引用。
为什么需要中介者模式?
没有中介者时,对象之间直接通信会导致:
- 网状结构:每个对象都要知道其他所有对象
- 高度耦合:修改一个对象可能影响多个其他对象
- 难以维护:交互逻辑分散在各个对象中
PHP实现示例
<?php
// 1. 中介者接口
interface ChatMediator {
public function sendMessage(User $user, string $message): void;
public function addUser(User $user): void;
}
// 2. 具体中介者 - 聊天室
class ChatRoom implements ChatMediator {
private array $users = [];
public function addUser(User $user): void {
$this->users[] = $user;
$user->setMediator($this);
}
public function sendMessage(User $sender, string $message): void {
foreach ($this->users as $user) {
// 不把消息发送给自己
if ($user !== $sender) {
$user->receiveMessage($sender, $message);
}
}
}
}
// 3. 同事类 - 用户
class User {
private string $name;
private ?ChatMediator $mediator = null;
public function __construct(string $name) {
$this->name = $name;
}
public function setMediator(ChatMediator $mediator): void {
$this->mediator = $mediator;
}
public function send(string $message): void {
echo "{$this->name} 发送消息: {$message}\n";
$this->mediator->sendMessage($this, $message);
}
public function receiveMessage(User $sender, string $message): void {
echo "{$this->name} 收到来自 {$sender->getName()} 的消息: {$message}\n";
}
public function getName(): string {
return $this->name;
}
}
// 4. 客户端使用
$chatRoom = new ChatRoom();
$alice = new User("Alice");
$bob = new User("Bob");
$charlie = new User("Charlie");
$chatRoom->addUser($alice);
$chatRoom->addUser($bob);
$chatRoom->addUser($charlie);
$alice->send("大家好!");
// 输出:
// Alice 发送消息: 大家好!
// Bob 收到来自 Alice 的消息: 大家好!
// Charlie 收到来自 Alice 的消息: 大家好!
$bob->send("你好 Alice!");
// 输出:
// Bob 发送消息: 你好 Alice!
// Alice 收到来自 Bob 的消息: 你好 Alice!
// Charlie 收到来自 Bob 的消息: 你好 Alice!
中介者模式的优势
- 降低耦合度:对象只与中介者通信,不直接相互引用
- 集中控制交互逻辑:所有交互规则集中在中介者中
- 易于扩展:添加新同事类只需修改中介者
- 提高重用性:可以替换不同的中介者实现
实际应用场景
- UI组件交互:表单控件之间的联动(如选择下拉菜单影响其他字段)
- 聊天系统:消息中心协调用户之间的通信
- 工作流引擎:协调不同步骤之间的流转
- 事件驱动系统:事件总线协调发布者和订阅者
注意事项
- 中介者可能变得过于复杂,承担过多职责
- 中介者本身可能成为单点故障
- 适合多对多交互场景,简单的一对一交互不需要中介者
中介者模式在PHP中是一种有效的设计模式,特别适合处理复杂对象间的协调通信。