1. 程式人生 > 實用技巧 >php 23種設計模型 - 中介者模式

php 23種設計模型 - 中介者模式

中介者模式

中介者模式(Mediator Pattern)是用來降低多個物件和類之間的通訊複雜性。這種模式提供了一箇中介類,該類通常處理不同類之間的通訊,並支援鬆耦合,使程式碼易於維護。中介者模式屬於行為型模式。

主要角色

中介者模式用於開發一個物件,這個物件能夠在類似物件相互之間不直接相互的情況下傳送或者調解對這些物件的集合的修改。 一般處理具有類似屬性,需要保持同步的非耦合物件時,最佳的做法就是中介者模式。PHP中不是特別常用的設計模式。

應用例項:1、中國加入 WTO 之前是各個國家相互貿易,結構複雜,現在是各個國家通過 WTO 來互相貿易。 2、機場排程系統。 3、MVC 框架,其中C(控制器)就是 M(模型)和 V(檢視)的中介者。

優點:1、降低了類的複雜度,將一對多轉化成了一對一。 2、各個類之間的解耦。 3、符合迪米特原則。

缺點:中介者會龐大,變得複雜難以維護。

使用場景:1、系統中物件之間存在比較複雜的引用關係,導致它們之間的依賴關係結構混亂而且難以複用該物件。 2、想通過一箇中間類來封裝多個類中的行為,而又不想生成太多的子類。

abstract class Mediator
{
    abstract public function Send(String $message, Colleague $colleague);
}

class ConcreteMediator extends Mediator
{
    public $colleague1;
    public $colleague2;

    public function Send(String $message, Colleague $colleague)
    {
        if ($colleague == $this->colleague1) {
            $this->colleague2->Notify($message);
        } else {
            $this->colleague1->Notify($message);
        }
    }
}
abstract class Colleague
{
    protected $mediator;
    public function __construct(Mediator $mediator)
    {
        $this->mediator = $mediator;
    }

}

class ConcreteColleague1 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事1得到資訊:" . $message, PHP_EOL;
    }
}

class ConcreteColleague2 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事2得到資訊:" . $message;
    }
}

$m = new ConcreteMediator();

$c1 = new ConcreteColleague1($m);
$c2 = new ConcreteColleague2($m);

$m->colleague1 = $c1;
$m->colleague2 = $c2;

$c1->Send("吃過飯了嗎?");
$c2->Send("沒有呢,你打算請客?");

23種模式總覽 :https://www.cnblogs.com/houss/p/11121584.html