PHP中介者模式协调对象交互吗

wen PHP项目 2

本文目录导读:

PHP中介者模式协调对象交互吗

  1. 中介者模式的核心作用
  2. 为什么需要中介者模式?
  3. PHP实现示例
  4. 中介者模式的优势
  5. 实际应用场景
  6. 注意事项

是的,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!

中介者模式的优势

  1. 降低耦合度:对象只与中介者通信,不直接相互引用
  2. 集中控制交互逻辑:所有交互规则集中在中介者中
  3. 易于扩展:添加新同事类只需修改中介者
  4. 提高重用性:可以替换不同的中介者实现

实际应用场景

  • UI组件交互:表单控件之间的联动(如选择下拉菜单影响其他字段)
  • 聊天系统:消息中心协调用户之间的通信
  • 工作流引擎:协调不同步骤之间的流转
  • 事件驱动系统:事件总线协调发布者和订阅者

注意事项

  • 中介者可能变得过于复杂,承担过多职责
  • 中介者本身可能成为单点故障
  • 适合多对多交互场景,简单的一对一交互不需要中介者

中介者模式在PHP中是一种有效的设计模式,特别适合处理复杂对象间的协调通信。

抱歉,评论功能暂时关闭!