PHP設計模式—外觀模式

 

定義:

外觀模式(Facade):又叫門面模式,爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。php

 

代碼實例:

假設實現一個功能須要用到子系統中的四個方法。函數

/**
 * Class SubSystemOne
 */
class SubSystemOne
{
    public function methodOne()
    {
        return '子系統方法一' . '<br>';
    }
}

/**
 * Class SubSystemTwo
 */
class SubSystemTwo
{
    public function methodTwo()
    {
        return '子系統方法二' . '<br>';
    }
}

/**
 * Class SubSystemThree
 */
class SubSystemThree
{
    public function methodThree()
    {
        return '子系統方法三' . '<br>';
    }
}

/**
 * Class SubSystemFour
 */
class SubSystemFour
{
    public function methodFour()
    {
        return '子系統方法四' . '<br>';
    }
}

若是不使用外觀模式,客戶端代碼應該爲:this

$subSystemOne = new SubSystemOne();
$subSystemTwo = new SubSystemTwo();
$subSystemThree = new SubSystemThree();
$subSystemFour = new SubSystemFour();

echo $subSystemOne->methodOne();
echo $subSystemTwo->methodTwo();
echo $subSystemThree->methodThree();
echo $subSystemFour->methodFour();

這樣的寫法須要客戶端了解子系統的具體實現方法,且代碼沒有解耦,若是子系統發生變化,則全部的客戶端調用都須要進行相應的變化。spa

 

如下使用外觀模式:
新增外觀類Facade.phpcode

/**
 * 外觀類,整合須要調用的子系統代碼,給客戶端調用,若是子系統發生變化,只用修改外觀類代碼
 * Class Facade
 */
class Facade
{
    /**
     * @var
     */
    private $subSystemOne;

    /**
     * @var
     */
    private $subSystemTwo;

    /**
     * @var
     */
    private $subSystemThree;

    /**
     * @var
     */
    private $subSystemFour;

    /**
     * Facade constructor.
     */
    public function __construct()
    {
        $this->subSystemOne = new SubSystemOne();
        $this->subSystemTwo = new SubSystemTwo();
        $this->subSystemThree = new SubSystemThree();
        $this->subSystemFour = new SubSystemFour();
    }


    /**
     * 整合方法
     */
    public function method()
    {
        echo $this->subSystemOne->methodOne();
        echo $this->subSystemTwo->methodTwo();
        echo $this->subSystemThree->methodThree();
        echo $this->subSystemFour->methodFour();
    }
}

客戶端調用:blog

$facade = new Facade();
// 客戶端能夠不用知道子系統的存在,調用外觀類中提供的方法就能夠
$facade->method();

結果:接口

子系統方法一
子系統方法二
子系統方法三
子系統方法四

 

總結:

  • 外觀模式可以爲複雜系統提供簡單且清晰的接口。
  • 外觀模式只爲系統中的某一層或子系統提供單一入口,可以幫助咱們解耦項目中的不一樣部分,客戶端只需調用一些簡單方法,而不須要了解子系統的內部函數。
  • 當子系統發生變化時,只會對一個地方產生影響。
  • 若是但願客戶端代碼能簡單地調用子系統或系統地改動不會影響客戶端代碼,那麼就能夠使用外觀模式。
相關文章
相關標籤/搜索