定義
用一箇中介物件(中介者)來封裝一系列的物件互動,中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。
設計的原則和思想
- 解耦的各個物件之間的依賴。
- 不變部分是各個物件之間的依賴關係,變化部分是各個物件所依賴的物件(中介者模式用中介者去替換之前的依賴關係)。
- 核心思想是將網狀結構的關係轉換成星型結構的關係,即多對多轉換成一對多的關係。
一句話概括設計模式
中介者類管理所有類的關係。
結構中包含的角色
- Mediator(抽象中介者)
- ConcreteMediator(具體中介者)
- Colleague(抽象同事類)
- 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();
優點
- 中介者模式簡化了物件之間的互動, 從網狀結構轉換成相對簡單的星型結構。
- 中介者模式可將各同事物件解耦。
- 無需修改實際元件就能增加新的中介者。
- 降低了類的複雜度,更方便地複用各個元件。
缺點
- 具體中介者類中包含了大量同事之間的互動細節,會導致具體中介者類非常複雜。
- 中介者會越來越龐大,變得複雜難以維護。
何時使用
- 系統中物件之間存在複雜的引用關係,系統結構混亂且難以理解。
- 當一些物件和其他物件緊密耦合以致難以對其進行修改時。
- 當元件因過於依賴其他元件而無法在不同應用中複用時。
實際應用場景
- 找中介租房。
- 聊天室。
本作品採用《CC 協議》,轉載必須註明作者和本文連結