極簡設計模式-中介者模式

long2ge發表於2021-12-10

定義

用一箇中介物件(中介者)來封裝一系列的物件互動,中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。

設計的原則和思想

  1. 解耦的各個物件之間的依賴。
  2. 不變部分是各個物件之間的依賴關係,變化部分是各個物件所依賴的物件(中介者模式用中介者去替換之前的依賴關係)。
  3. 核心思想是將網狀結構的關係轉換成星型結構的關係,即多對多轉換成一對多的關係。

一句話概括設計模式

中介者類管理所有類的關係。

結構中包含的角色

  1. Mediator(抽象中介者)
  2. ConcreteMediator(具體中介者)
  3. Colleague(抽象同事類)
  4. ConcreteColleague(具體同事類)

最小可表達程式碼

// 抽象中介者
abstract class Mediator 
{
    public abstract function execute();  
} 

// 具體中介者
class ConcreteMediator extends Mediator
{  
    public function execute()
    {
        echo '具體中介者';
    }
}

// 抽象同事類
abstract class Colleague
{
    protected $mediator;

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

    // 宣告自身方法,處理自己的行為
    public abstract function method1();

    // 與中介者進行通訊  
    public function method2()
    {
        $this->mediator->execute();
    }  
}

// 具體同事類
class ConcreteColleague extends Colleague
{
    public function method1()
    {
        echo '具體自身方法';
    }
}

$mediator = new ConcreteMediator();
$colleague = new ConcreteColleague($mediator);
$colleague->method1();
$colleague->method2();

優點

  1. 中介者模式簡化了物件之間的互動, 從網狀結構轉換成相對簡單的星型結構。
  2. 中介者模式可將各同事物件解耦。
  3. 無需修改實際元件就能增加新的中介者。
  4. 降低了類的複雜度,更方便地複用各個元件。

缺點

  1. 具體中介者類中包含了大量同事之間的互動細節,會導致具體中介者類非常複雜。
  2. 中介者會越來越龐大,變得複雜難以維護。

何時使用

  1. 系統中物件之間存在複雜的引用關係,系統結構混亂且難以理解。
  2. 當一些物件和其他物件緊密耦合以致難以對其進行修改時。
  3. 當元件因過於依賴其他元件而無法在不同應用中複用時。

實際應用場景

  1. 找中介租房。
  2. 聊天室。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章