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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本久久影视 | 国产福利视频一区二区微拍 | 91精品国产高清久久久久 | 美女操批| 色哺乳妇hd | 精品久久久久久无码人妻国产馆 | 色播开心网 | 侵犯小男生免费视频网站 | 女上男下gifxxoo动态视频 | 滑进了柔佳火热紧夹的 | a黄色| 欧美日韩视频在线第一区二区三区 | 精品欧美一区二区三区久久久 | 天美传媒tm0065| 亚洲成A人片在线观看中文L | 9久re在线观看视频精品 | 好男人社区www影院在线观看 | 国产日韩视频一区 | 出轨同学会免费观看 | 24adc年龄18岁欢迎大驾光临 | 国产精品免费拍拍拍 | 亚洲精彩视频在线观看 | 国产日产韩产麻豆1区 | 免费在线影院 | 男男互操文 | chinese男同志gay免费 | 丝瓜视频看污片 | 欧美丰满大乳大屁在线观看股 | 精品国产欧美一区二区 | 久久er99热精品一区二区 | 成人影院在线观看 | 女人叉开腿让男人桶 | 亚洲一二三区视频 | 我被黄总征服的全过程 | 国产成人咱精品视频免费网站 | 驯服有夫之妇HD中字日本 | 国自产在线精品免费 | 青青久在线视频免费观看 | 果冻传媒在线免费观看 | 男人jj视频 | 日本午夜大片免费观看视频 |