首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 設計模式:Mediator(中介者模式)封裝物件交互降低耦合

     編輯:PHP 綜合知識

中介者模式核心動機

中介者模式用一個中介對象封裝一系列對象交互,使各對象不需顯式相互引用,從而鬆散耦合,並能獨立改變交互行為。避免「網狀結構」的相互依賴,將多對多關係轉為一對多(中介者與同事)。

角色定義

  • Mediator(抽象中介者):定義同事對象通訊介面。
  • ConcreteMediator(具體中介者):協調同事對象,實作轉發邏輯。
  • Colleague(抽象同事類):持有中介者引用,透過中介者通訊。
  • ConcreteColleague(具體同事):實作具體通訊行為。

PHP 程式碼實作:雙向通訊範例

<?php
/**
 * 中介者模式
 * 用一個中介對象來封裝一系列的對象交互
 */
abstract class Mediator {
    abstract public function send($message, $colleague);
}

abstract class Colleague {
    private $_mediator = null;

    public function __construct($mediator) {
        $this->_mediator = $mediator;
    }

    public function send($message) {
        $this->_mediator->send($message, $this);
    }

    abstract public function notify($message);
}

class ConcreteMediator extends Mediator {
    private $_colleague1 = null;
    private $_colleague2 = null;

    public function send($message, $colleague) {
        if ($colleague == $this->_colleague1) {
            $this->_colleague2->notify($message);
        } else {
            $this->_colleague1->notify($message);
        }
    }

    public function set($colleague1, $colleague2) {
        $this->_colleague1 = $colleague1;
        $this->_colleague2 = $colleague2;
    }
}

class Colleague1 extends Colleague {
    public function notify($message) {
        echo "Colleague1 Message is : $message<br/>";
    }
}

class Colleague2 extends Colleague {
    public function notify($message) {
        echo "Colleague2 Message is : $message<br/>";
    }
}

// 客戶端
$objMediator = new ConcreteMediator();
$objC1 = new Colleague1($objMediator);
$objC2 = new Colleague2($objMediator);
$objMediator->set($objC1, $objC2);

$objC1->send("to c2 from c1");
$objC2->send("to c1 from c2");
?>

優勢與適用場景

中介者模式將交互邏輯集中化,降低類別間耦合,符合迪米特法則。適用於多對象複雜交互(如對話框控件協調、航管系統、聊天室伺服器)。但中介者本身可能變得複雜,需權衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved