一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 淺談PHP設計模式之門面模式Facade

淺談PHP設計模式之門面模式Facade

2021-11-15 16:00phpyu PHP教程

門面模式的最初目的并不是為了避免讓你閱讀復雜的 API 文檔,這只是一個附帶作用。其實它的本意是為了降低耦合性并且遵循 Demeter 定律。

目的

Facade通過嵌入多個(當然,有時只有一個)接口來解耦訪客與子系統,同時也為了降低復雜度。

  • Facade 不會禁止你訪問子系統
  • 你可以(應該)為一個子系統提供多個 Facade

因此一個好的 Facade 里面不會有 new 。如果每個方法里都要構造多個對象,那么它就不是 Facade,而是生成器或者[抽象|靜態|簡單] 工廠 [方法]。

優秀的 Facade 不會有 new,并且構造函數參數是接口類型的。如果你需要創建一個新實例,則在參數中傳入一個工廠對象。

UML

淺談PHP設計模式之門面模式Facade

代碼

Facade.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
 
namespace DesignPatterns\Structural\Facade;
 
class Facade
{
    /**
    * @var OsInterface
    * 定義操作系統接口變量。
    */
    private $os;
 
    /**
    * @var BiosInterface
    * 定義基礎輸入輸出系統接口變量。
    */
    private $bios;
 
    /**
    * @param BiosInterface $bios
    * @param OsInterface $os
    * 傳入基礎輸入輸出系統接口對象 $bios 。
    * 傳入操作系統接口對象 $os 。
    */
    public function __construct(BiosInterface $bios, OsInterface $os)
    {
        $this->bios = $bios;
        $this->os = $os;
    }
 
    /**
    * 構建基礎輸入輸出系統執行啟動方法。
    */
    public function turnOn()
    {
        $this->bios->execute();
        $this->bios->waitForKeyPress();
        $this->bios->launch($this->os);
    }
 
    /**
    * 構建系統關閉方法。
    */
    public function turnOff()
    {
        $this->os->halt();
        $this->bios->powerDown();
    }
}

OsInterface.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
namespace DesignPatterns\Structural\Facade;
 
/**
* 創建操作系統接口類 OsInterface 。
*/
interface OsInterface
{
    /**
    * 聲明關機方法。
    */
    public function halt();
 
    /**
    * 聲明獲取名稱方法,返回字符串格式數據。
    */
    public function getName(): string;
}

BiosInterface.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
namespace DesignPatterns\Structural\Facade;
 
/**
* 創建基礎輸入輸出系統接口類 BiosInterface 。
*/
interface  BiosInterface
{
    /**
    * 聲明執行方法。
    */
    public function execute();
 
    /**
    * 聲明等待密碼輸入方法
    */
    public function waitForKeyPress();
 
    /**
    * 聲明登錄方法。
    */
    public function launch(OsInterface $os);
 
    /**
    * 聲明關機方法。
    */
    public function powerDown();
}

測試

Tests/FacadeTest.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
 
namespace DesignPatterns\Structural\Facade\Tests;
 
use DesignPatterns\Structural\Facade\Facade;
use DesignPatterns\Structural\Facade\OsInterface;
use PHPUnit\Framework\TestCase;
 
/**
* 創建自動化測試單元 FacadeTest 。
*/
class FacadeTest extends TestCase
{
    public function testComputerOn()
    {
        /** @var OsInterface|\PHPUnit_Framework_MockObject_MockObject $os */
        $os = $this->createMock('DesignPatterns\Structural\Facade\OsInterface');
 
        $os->method('getName')
            ->will($this->returnValue('Linux'));
 
        $bios = $this->getMockBuilder('DesignPatterns\Structural\Facade\BiosInterface')
            ->setMethods(['launch', 'execute', 'waitForKeyPress'])
            ->disableAutoload()
            ->getMock();
 
        $bios->expects($this->once())
            ->method('launch')
            ->with($os);
 
        $facade = new Facade($bios, $os);
 
        // 門面接口很簡單。
        $facade->turnOn();
 
        // 但你也可以訪問底層組件。
        $this->assertEquals('Linux', $os->getName());
    }
}

以上就是淺談PHP設計模式之門面模式Facade的詳細內容,更多關于PHP設計模式之門面模式Facade的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/phpyu/p/13681737.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产高清在线视频一区二区三区 | 男女肉粗暴进来下面好紧 | 金莲你下面好紧夹得我好爽 | 暖暖免费高清完整版观看日本 | 三上悠亚精品专区久久 | 涩涩五月天 | 免费网址在线观看入口推荐 | 肥胖女性大bbbbbb视频女厕 | 国产高清在线精品一区二区 | 麻豆资源| 色综合天天综合网站中国 | 国产午夜免费秋霞影院 | 男老头澡堂gay老头456 | 惩罚美女妲己的尤老师 | 女色在线观看免费视频 | 热巴在公交车h文 | 免费视频完整版在线观看网站 | 67194最新网址 | 国产裸露片段精华合集链接 | 国产乱妇无码大片在线观看 | 动漫女性扒开尿口羞羞漫画 | japanese在线看 | 国产人va在线 | xnxx18美女| 成人动漫在线免费看 | 午夜亚洲一区二区福利 | 男人天堂影院 | 欧美国产在线观看 | 色综合久久天天综合 | yjzz视频 | 久青草国产97香蕉在线视频 | 亚洲国产精品自在在线观看 | 变态 另类 国产 亚洲 | 国产午夜精品一区二区 | 国产成人精品视频频 | 猫咪免费人成网站在线观看入口 | 国产自产2023最新麻豆 | 姐姐不~不可以动漫在线观看 | 饭冈加奈子黑人解禁在线播放 | 国语视频高清在线观看 | 久久毛片基地 |