PHP設計模式之簡單工廠模式

2021-10-07 02:27:26 字數 2442 閱讀 9413

先從簡單工廠入門,不管是面試還是被他人面試,在問到設計模式的時候,大多數人都會提到工廠模式。毫無疑問,工廠相關的幾種模式在設計模式中是最出名的也是應用比較廣泛的一種模式。在gof設計模式中也都是屬於建立型的模式。

但是,能夠說明白簡單工廠工廠模式抽象工廠模式這三種模式的人還真能讓面試官刮目相看。這裡有個前提,是你真的能說明白,大部分人,包括在深入研究設計模式之前,我也沒辦法說清楚。不管是我去面試,還是面試其別人。當我面試別人的時候,能講個大概也就差不多了。而我去面試的時候,也就是類似的講個大概。經歷不少挫折之後才有了想深入的研究研究設計模式的想法,於是便會產生這一系列的文章。從這篇簡單工廠開始,我們一起再次深入的對設計模式進行學習。

簡單工廠,也稱靜態工廠,不屬於gof23種設計模式。但是可以說是所有的設計模式中大家可能最容易理解,也可能在你的**中早就已經用過不知道多少次的一種設計模式了。我們先從乙個最最簡單的**段來看。

// factory

class

factory

return

$product;}

}

沒錯,核心點就是中間那段簡單的switch**,我們在返回值型別中固定為product介面的實現。

在這段**中,使用了php新特性,引數型別返回值型別

產品介面和產品實現

// products

inte***ce

product

class

producta

implements

product

}class

productb

implements

product

}

最後客戶端的使用就很簡單了

// client

$producta

= factory:

:createproduct

('a');

$productb

= factory:

:createproduct

('b');

$producta

->

show()

;$productb

->

show()

;

從以上**可以看出,其實這裡就是乙個工廠類根據我們傳入的字串或者其他你自己定義的識別符號,來返回對應的產品(product物件)。

形象化一點的比喻:我是乙個賣手機的批發商(客戶client,業務方),我需要一批手機(產品product),於是我去讓富士康(工廠factory)來幫我生產。我下了訂單($type變數)指明型號,然後富士康就給我對應型號的手機,然後我就繼續我的工作了,和富士康的合作還真是挺愉快的。

這裡比較規範的寫法可能是所有產品都會去實現乙個統一的介面,然後客戶端只知道介面的方法統一呼叫即可。不規範的話也可以不使用介面,返回各種不同的物件,類似於外觀(facade)模式進行統一的門面管理。

場景:簡訊傳送功能模組。現在我們使用了三個商家的,分別是阿里雲、蝶信、極光的簡訊服務,在不同業務中可能使用不同的簡訊傳送商,使用簡單工廠可以方便的完成這個需求。

類圖

// 當前業務需要使用極光

$message

= messagefactory:

:createmessage

('ali');

echo

$message

->

send

('您有新的短訊息,請查收'

);

說明

工廠方法模式,接著發簡訊,但這回我們讓客戶端換個姿勢來發*

php 設計模式之簡單工廠模式

摘要 學習php,不知道工廠模式,怎麼去看框架原始碼,怎麼能夠透徹理解php這門語言呢?1 類的宣告 一些修飾類關鍵字 class 類名修飾類的關鍵字 abstract final 訪問控制修飾符包括這三個 public private protect 關鍵字,用來修飾類 成員屬性 成員方法,使它們...

php設計模式之簡單工廠模式

簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化所有相對應的子類 定義個抽象的類,讓子類去繼承實現它 abstract class operation 加法類 class operationadd extends oper...

Php設計模式之工廠模式(一)簡單工廠模式

案例 黑棗轉殖公司是專門批量生產轉殖狗的一家企業。當轉殖出乙隻黑狗的實現 如下 實現 class doggener if color red class blackdog class reddog doggen new doggener doggen create black 分析ooa 軟體工程師...