GOF23-工廠模式

1.什麼是工廠模式

就是實現建立者與調用者分離,工廠模式的核心(靈魂)其實就是:分工。測試

 

2.工廠模式有哪些

  • 簡單工場模式(靜態工廠)

簡單工廠模式也叫靜態工廠模式,就是工廠類通常使用靜態方法,經過接受的參數的不一樣來建立不一樣的對象並返回。其缺點是對新增的業務類無能爲力,必需要修改代碼來完成擴展(不知足OCP原則)。設計

咱們先來看下沒有工程類的狀況3d

image imageimage

測試類Main方法及測試結果:對象

image

image

 

 

咱們能夠看出建立對象要直接與Audi、BMW類直接打打交道。blog

咱們再來看使用簡單工廠類接口

imageimageimage

能夠看出,測試類並無直接跟Audi、BMW類「直接打交道」,而是經過CarFactory來達到目的,能夠理解建立對象的活已經交給CarFactory來作,再也不由測試類直接建立(這也就是所謂的控制反轉)。get

  • 工廠方法模式

建立工廠類接口,經過新增業務類,來知足新功能(知足OCP原則),缺點:結構變得更加複雜,代碼更加複雜,理論上工廠方法更優,但實際咱們經常使用簡單工廠模式。產品

咱們須要建立一個工廠接口,及對應工廠實現類。it

imageimageimage

測試類及結果擴展

image image

能夠看出,咱們是經過新增產品工廠類來實現產品對象的建立,試下若是要新增一個保時捷對象,咱們此時須要怎麼作?其實咱們只須要新增一個保時捷的工廠類(實現CarFactory)便可。與簡單工廠模式相比較:工廠方法模式結構更復雜(須要多個產品類),代碼上也相對複雜,管理難度大(維護起來麻煩)。

  • 抽象工廠模式

適用於生成不一樣產品族的所有產品,對於新產品無能爲力,而是適用於產品族。比其上面兩種工廠模式更復雜。

假設咱們如今要建立多個接口產品,上面兩種工廠模式就無能爲力了。

imageimageimage

image

咱們目前僅建立了一個Engine接口,分別建立了超級引擎類,中端引擎類,低端引擎類。其他接口因爲篇幅關係就不一一截圖了,道理相似。好比:咱們再增長一個座椅接口,再分別建立超級座椅,中端座椅,低端座椅。

超級引擎+超級座椅+超級輪胎=超級汽車

中端引擎+超級座椅+超級輪胎=中級汽車

……..

這就造成了不一樣產品族。

image image

測試類及結果

imageimage

超級汽車工廠創造出汽車引擎是超級引擎。

3.總結

  • 簡單工廠

即便在某種程度上不知足OCP設計原則,可是實際項目中用的最多。

  • 工廠方法

在不修改已存在類的前提下,經過增長新的工廠類來達到實現擴展的目的。

  • 抽象工廠

不能單獨增長某個產品,能夠增長產品族。

相關文章
相關標籤/搜索