小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

PHP設(shè)計(jì)模式—外觀模式

 行者花雕 2021-07-19

 

定義:

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

 

代碼實(shí)例:

假設(shè)實(shí)現(xiàn)一個(gè)功能需要用到子系統(tǒng)中的四個(gè)方法。

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

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

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

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

如果不使用外觀模式,客戶端代碼應(yīng)該為:

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

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

這樣的寫法需要客戶端了解子系統(tǒng)的具體實(shí)現(xiàn)方法,且代碼沒有解耦,如果子系統(tǒng)發(fā)生變化,則所有的客戶端調(diào)用都需要進(jìn)行相應(yīng)的變化。

 

以下使用外觀模式:
新增外觀類Facade.php

/**
 * 外觀類,整合需要調(diào)用的子系統(tǒng)代碼,給客戶端調(diào)用,如果子系統(tǒng)發(fā)生變化,只用修改外觀類代碼
 * 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();
    }
}

客戶端調(diào)用:

$facade = new Facade();
// 客戶端可以不用知道子系統(tǒng)的存在,調(diào)用外觀類中提供的方法就可以
$facade->method();

結(jié)果:

子系統(tǒng)方法一
子系統(tǒng)方法二
子系統(tǒng)方法三
子系統(tǒng)方法四

 

總結(jié):

  • 外觀模式能夠?yàn)閺?fù)雜系統(tǒng)提供簡(jiǎn)單且清晰的接口。
  • 外觀模式只為系統(tǒng)中的某一層或子系統(tǒng)提供單一入口,能夠幫助我們解耦項(xiàng)目中的不同部分,客戶端只需調(diào)用一些簡(jiǎn)單方法,而不需要了解子系統(tǒng)的內(nèi)部函數(shù)。
  • 當(dāng)子系統(tǒng)發(fā)生變化時(shí),只會(huì)對(duì)一個(gè)地方產(chǎn)生影響。
  • 如果希望客戶端代碼能簡(jiǎn)單地調(diào)用子系統(tǒng)或系統(tǒng)地改動(dòng)不會(huì)影響客戶端代碼,那么就可以使用外觀模式。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多