国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久久久久久久影院 | 欧美黄色一级片免费看 | 夜夜操天天干, | 国产成人精品一区二区 | 日韩精品一区二区在线观看视频 | a免费在线 | 国产精品一级大片 | 成人瑟瑟| 91视频.com| 亚洲午夜成激人情在线影院 | 成人免费视频在线观看 | 亚洲精品免费在线观看视频 | 综合色成人 | 国产精品黄色 | 国产免费高清 | 黄色一级毛片在线观看 | 免费a级毛片在线看 | 成人久久久久久 | 一区二区久久 | 亚洲成人中文字幕 | 日本久久精品视频 | 色视av | 欧美午夜影院 | 免费高清黄色 | 无码一区二区三区视频 | 日韩电影在线一区 | 日本视频中文字幕 | 日韩欧美在线观看视频 | 黄色二区| 亚洲国产精品欧美一二99 | 国产三级毛片 | 日日夜夜国产 | 日本高清一区 | 日韩无在线 | 亚洲免费视频在线观看 | 操久久 | 91毛片视频 | 久久一区二区三区四区 | 中文字幕一级 | 国产精品久久久久久久久久新婚 | 蜜桃av一区二区三区 |