1. 程式人生 > >php設計模式----門面模式(facade)

php設計模式----門面模式(facade)

在laravel看到了Facade這個詞,這裡是文件

挺簡單的一個模式,記錄在這裡,其實也很常用。基本定義我參考的百度

一、舉個例子

我們出去旅行,對於同樣的路線,跟團和自費有什麼區別。

跟團的好處是省心,繳費以後路線,車,門票都不用再操心了。

自費的好處是今天累了我可以休息,覺得那個景點不錯,我可以臨時更改行程。

<?php
//子系統類共3個
class ScenicArea
{
    public function Ticket1()
    {
        echo "景區1門票<br/>";
    }

    public function Ticket2()
    {
        echo "景區2門票<br/>";
    }

    public function Ticket3()
    {
        echo "景區3門票<br/>";
    }
}
 
class Traffic
{
    public function __construct(){}
    public function buyBusTicket($from, $to)
    {
        echo "買入從".$from."到".$to."的汽車票<br/>";
    }
    public function buyTrainTicket($from, $to)
    {
        echo "買入從".$from."到".$to."的火車票<br/>";
    }
}

class Hotel
{
    public function __construct(){}
    public function hotel($place)
    {
        echo "訂下".$place."的旅店<br/>";
    } 
}
//Facade 類
class Facade
{
    private $traffic;
    private $scenicArea;
    private $hotel;

    public function __construct()
    {
        $this->hotel = new Hotel();
        $this->traffic  = new Traffic();
        $this->scenicArea   = new ScenicArea();
    }
 
    public function oneDay()
    {
        $this->traffic->buyBusTicket('A','B');
        $this->scenicArea->Ticket1();
        $this->traffic->buyBusTicket('B','A');
    }
 
    public function twoDay()
    {
        $this->traffic->buyTrainTicket('A','B');
        $this->scenicArea->Ticket1();
        $this->traffic->buyBusTicket('B','C');
        $this->hotel->hotel('C');
        $this->scenicArea->Ticket2();
        $this->traffic->buyTrainTicket('C','A');
    }
}

//客戶端呼叫
$agency = new Facade();
$one = $agency->oneDay();
echo '===========<br/>';
$two = $agency->twoDay();

 如果是自費,很顯然你會在客戶端呼叫的時候,new完上面的3個子系統類,然後自己組裝。這裡我就不再寫了。

二、定義

提供一個統一的介面去訪問多個子系統的多個不同的介面,它為子系統中的一組介面提供一個統一的高層介面。使用子系統更容易使用。

構成

1.定義一個(或多個)具備所需介面的新類(門面類Facade)
2.新類門戶(門面類Facade)使用原來的系統(包含Hotel,Traffic,ScenicArea三個類)
3.客戶使用門面類物件與原系統打交道(客戶端只調用Facade)

三、一些看法

其實門面模式我們在不知不覺中用的挺多的,大一些的專案,和其他人對接,第一個層api介面,只接收資料,呼叫第二層的方法,第二層,就是門面模式了,第三層是各種功能類。門面模式促使我們把底層程式碼寫的很細緻,而不是一坨。這樣在日後查詢功能的時候,前2層的程式碼邏輯都是很清晰的。

php不用打包,其實修改很方便的,個人感覺構不成缺點,尤其在結構清晰面前,就算是個缺點可以忽略。

相關推薦

設計模式:外觀Facade模式

text 一起 其它 QQ 如何 互調 IT 抽象 整合 設計模式:外觀(Facade)模式 一、前言 外觀模式是一種非常簡單的模式,簡單到我們經常都會使用,比如對於類A和B,如果兩者需要交互,經過一定的處理過程才能實現某一個具體的功能,那麽我們可以將這個處理的過程定義

設計模式之外觀facade模式

一、概念介紹   外觀模式(Facade),他隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面。這種型別的設計模式屬於結構性模式。為子系統中的一組介面提供了一個統一的訪問介面,這個介面使得子系統更容易被訪問或者使用。  二、角色及使用場景   簡單來說,該

php設計模式----門面模式facade

在laravel看到了Facade這個詞,這裡是文件。 挺簡單的一個模式,記錄在這裡,其實也很常用。基本定義我參考的百度。 一、舉個例子 我們出去旅行,對於同樣的路線,跟團和自費有什麼區別。 跟團的好處是省心,繳費以後路線,車,門票都不用再操心了。 自費的好處是今天

外觀模式 門面模式 Facade 創建型 設計模式十三

層次 好的 代碼 實例 width 負責 相互 one https 外觀模式(FACADE) 又稱為門面模式 意圖 為子系統中的一組接口提供一個一致的界面 Facade模式定義了一個高層接口,這一接口使得這一子系統更加易於使用。 意圖解析 隨著項目

外觀模式 門面模式 Facade 建立型 設計模式十三

外觀模式(FACADE) 又稱為門面模式   原文地址:外觀模式 門面模式 Facade 建立型 設計模式(十三) 意圖 為子系統中的一組介面提供一個一致的介面 Facade模式定義了一個高層介面,這一介面使得這一子系統更加易於使用。 意圖解析 隨著專

PHP設計模式之外觀模式Facade瞭解下

這個外觀模式,就是通過在必需的邏輯和方法的集合前建立簡單的外觀介面,並且還會隱藏了呼叫物件的複雜性,它和建造者模式非常相似,建造者模式一般是簡化物件的呼叫的複雜性,但是外觀模式一般是簡化含有很多邏輯步驟和方法呼叫的複雜性。 來看下例項,先來描述下: 設計一個User類,裡

設計模式 | 外觀模式/門面模式facade

結構 之前 有意 mina 應該 問題 pack src ack 定義: 為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 結構:(書中圖,侵刪) 一個簡潔易用的外觀類 一個復雜的子系統 實例: 書中提到了理財

設計模式之外觀模式Facade

設計模式之外觀模式(Facade) 場景 病人去醫院看病,首先病人必須先掛號,然後門診。如果醫生要求化驗,病人必須首先劃價,然後繳費,才可以到化驗部門做化驗。化驗後再回到門診室。 解決這種不便的方法便是引進外觀模式,醫院可以設定一個接待員的位置,由接待員負責代為掛號、劃價

設計模式6—— 結構型 ——外觀Facade

簡介 定義:又叫門面模式,提供一個統一的介面,用來訪問子系統中的一群介面。 解釋:外觀模式定義了一個高層介面,讓子系統更容易被使用。 型別:結構型 適用場景: 子系統越來越複雜,外觀模式能夠提供簡單的呼叫介面。

設計模式-外觀模式Facade

外觀模式又稱為門面模式,為一組類似功能的叢集,比如類庫、子系統等,提供一致的入口供client呼叫 角色和職責: 1.門面(Facade)-Computer:    外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合 2.子系統(Pac

設計模式 c++版18——門面模式

定義: 要求一個子系統的外部與其內部的通訊必須通過一個統一的物件進行。門面模式提供一個高層次的介面,使得子系統更易於使用(門面模式也叫做外觀模式)。 示例一:門面模式(通用版) 1. 類圖23-4 2. 類圖說明 Subsystem Classes 是子系統所有

門面Facade模式

外部與一個子系統的通訊必須通過一個統一的門面(Facade)物件進行,這就是門面模式。 醫院的例子 用一個例子進行說明,如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的客戶端與一個子系統的各個類打交道一樣,

單例模式singleton,工廠方法模式factory門面模式facade

CEmperor,需要單例的類 說明:很多大臣拜見的皇帝,只有一個。體現在面向物件方面,CEmperor定義一個靜態指標,和一個靜態函式,私有化建構函式、解構函式、建構函式複製、過載賦值語句。 注意:執行緒安全,採用互斥體的方式實現。 Public class Si

設計模式的征途—11.外觀Facade模式

在軟體開發中,有時候為了完成一項較為複雜的功能,一個類需要和多個其他業務類互動,而這些需要互動的業務類經常會作為一個完整的整體出現,由於涉及的類比較多,導致使用時程式碼較為複雜,此時,特別需要一個類似服務員一樣的角色,由他來負責和多個業務類進行互動,而使用這些業務類的類只需要和該類進行互動即可。外觀模式通過引

設計模式學習總結:外觀模式Facade

1.場景分析 如下圖所示,我們有一個家庭影院系統,其中包含了調音器、擴音器、播放器、劇場光、爆米花機等部分: 然後我們模擬使用這個系統來播放一部電影,則我們需要進行一下操作: //開啟爆米花機,開始爆米花 popper.on() popper.pop(

設計模式總結篇系列:外觀模式Facade

張三自從畢業後開始做軟體開發,做著做著發現不爽了,錢賺不了太多,頭髮也白了。於是拿著一點小資本,想著做點小生意。瞅著眼前的餐飲行業還不錯,於是打算開一家餐館。開參觀可不是一件容易的事,僅僅行政類的審批流程就不少。至少包括辦理衛生許可證,辦理稅務登記,辦理工商登記等。 我們

PHP設計模式之直譯器Interpreter模式瞭解下

直譯器模式,它是什麼呢? 意思就是,給定一個語言, 定義它的文法的一種表示,並定義一個直譯器,該直譯器使用該表示來解釋語言中的句子,這是最實在的一種說法。 我們還可以理解為它是用於分析一個實體的關鍵元素,並且針對每個元素提供自己的解釋或相應動作。直譯器模式非常常用,比如P

設計模式學習總結策略模式(Strategy)

isp 筆記本 override div ont 角色 write stat 通過   策略模式,主要是針對不同的情況采用不同的處理方式。如商場的打折季,不同種類的商品的打折幅度不一,所以針對不同的商品我們就要采用不同的計算方式即策略來進行處理。   一、示例展示:   以

設計模式學習總結適配器模式(Adapter)

實現接口 國外 手機 額外 sed ges program ebe 通過   適配器模式主要是通過適配器來實現接口的統一,如要實現國內手機在國外充電,則需要在不同的國家采用不同的適配器來進行兼容!   一、示例展示:   以下例子主要通過給筆記本電腦添加類似手機打電話和發短

設計模式六大原則6:開閉原則

思考 外部 編程人員 恰恰 單一職責 何事 適應 擴展 分享 開閉原則 定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。 問題由來:在軟件的生命周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對