簡單工廠模式

2021-09-08 06:21:10 字數 3056 閱讀 5785

在物件導向程式設計中, 最通常的方法是乙個new操作符產生乙個物件例項,new操作符就是用來構造物件例項的,但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多態別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定; 選擇生成哪個子物件例項; 或在生成你需要的物件之前必須先生成一些輔助功能的物件。 在這些情況,新物件的建立就是乙個 「過程」,不僅是乙個操作,像一部大機器中的乙個齒輪轉動。

你如何能輕鬆方便地構造物件例項,而不必關心構造物件例項的細節和複雜過程呢?

建立乙個工廠來建立物件

工廠模式主要是為建立物件提供過渡介面,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。 

工廠模式可以分為三類: 

1)簡單工廠模式(****** factory) 

2)工廠方法模式(factory method) 

3)抽象工廠模式(abstract factory) 

這三種模式從上到下逐步抽象,並且更具一般性。 

gof在《設計模式》一書中將工廠模式分為兩類:工廠方法模式(factory method)與抽象工廠模式(abstract factory)。

將簡單工廠模式(****** factory)看為工廠方法模式的一種特例,兩者歸為一類。 

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(static factory method)模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項,被建立的例項通常都具有共同的父類。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。

簡單工廠模式包含如下角色:

factory:工廠角色

product:抽象產品角色

concreteproduct:具體產品角色

工廠角色(factory)

是簡單工廠模式的核心,它負責實現建立所有具體產品類的例項。工廠類可以被外界直接呼叫,建立所需的產品物件。

抽象產品角色(product)

是所有具體產品角色的父類,它負責描述所有例項所共有的公共介面。

具體產品角色(concrete product)

繼承自抽象產品角色,一般為多個,是簡單工廠模式的建立目標。工廠類返回的都是該角色的某一具體產品。

}建立例項:

public static void main(string args)
執行結果:

吃蘋果吃香蕉

顯然我們可以抽象出乙個介面類fruit,

public inte***ce fruit
public void eat()

}

public  class banana implements fruit

}

建立例項

public static void main(string args)
執行結果:

吃蘋果吃香蕉

public class fruitfactory 

public fruit eatbanana()

}

public static void main(string args)
執行結果

吃蘋果吃香蕉

改進1:將fruitfactory工廠類中的方法改為靜態的,這樣可以直接呼叫它的方法

public class fruitfactory 

public static fruit eatbanana()

}

public static void main(string args)
執行結果:

吃蘋果吃香蕉

這樣就一步一步的完成了乙個簡單工廠的實現,但是,在工廠類中的兩個方法功能類似,我們可以改造成乙個吃水果的方法

通過給出的蘋果名稱去獲得對應的水果例項

public class fruitfactory else if (type.equalsignorecase("banana"))else }}

建立例項

public static void main(string args)
執行結果

吃蘋果吃香蕉

這種方式呢不易擴充套件,如果新加一種水果就要修改工廠類的**,那麼也可以使用反射的方法去獲取例項,但是使用者肯定不會通過反射的方法獲得物件例項的。

public class fruitfactory  catch (exception e) 

return null;}}

public static void main(string args)
執行結果

吃蘋果吃香蕉

設計模式都是一步一步推導驗證而來的,從推導的過程中我們更能體會到設計模式的優缺點。

優點

再簡單工廠模式中,工廠類是整個模式的關鍵所在,它包含必要的判斷邏輯,能夠根據給定的資訊去建立具體類的例項,使用者在使用時可以根據工廠類去建立所需的例項,而無需了解該物件例項是如何建立的。

缺點

當然由於工廠類集中了所有類例項的建立邏輯,當系統中的具體產品類不斷增多時,工廠類也需要做相應的修改,擴充套件性不是很好

模式適用環境

在以下情況下可以使用簡單工廠模式:

工廠類負責建立的物件比較少:由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

客戶端只知道傳入工廠類的引數,對於如何建立物件不關心:客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數。

工廠模式 簡單工廠

簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...

工廠模式 簡單工廠

工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...

簡單工廠模式,工廠模式,抽象工廠模式

三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...