一、定義
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延伸到其子類。
簡單的說,就是定義乙個工廠,由工廠的生產方法來生產具體的產品類,使用者只需要呼叫工廠的生產方法來獲取具體的產品,而不需要關心生產的過程。
二、優點
1.擁有良好的封裝性。呼叫者需要乙個具體產品,只需要向工廠獲取,而不用知道建立物件的艱辛過程,降低模組間的耦合。
2.易於擴充套件。增加產品時,只需要適當修改具體的工廠類或者擴充套件乙個工廠,甚至不用修改。
3.遮蔽產品類,解除耦合。產品類的實現如何變化,呼叫者都不需要關心,只需要關心產品的介面即可。
三、女媧造人例項分析
大家都聽過女媧捏土造人的神話故事,這軟體開發中,這個過程設計到三個物件:女媧、八卦爐、不同膚色的人。女媧可以使用場景類 client 表示,八卦爐類似於乙個工廠 factory,負責製造具體的產品 product(即人類 human)。相應的類圖如下:
abstracthumanfactory 的**可以如下定義:
public abstract class abstracthumanfactory
泛型限定了建立方法返回的物件型別必須是人類 human。
humanfactory 的**可以如下定義:
public class humanfactory extends abstracthumanfactory catch (exception e)
return (t)human;}}
使用反射可以避免新增產品時,還需要修改工廠的生產方法。
nvwa 類可以如下:
public class nvwa
}
四、簡單工廠模式
當我們僅需要使用到乙個工廠,我們沒必要把它產生出來,同時使用靜態方法就可以了。
例如上面女媧那個例子,我們可以去掉 abstracthumanfactory 類,同時把 createhuman 方法設定為靜態型別,簡化了類的建立過程。類圖如下:
類圖變簡單了,少了 abstracthumanfactory 類,呼叫也比較簡單,該模式是工廠方法模式的弱化,因為簡單,所以稱之為簡單工廠模式,也叫靜態工廠模式。
新的 humanfactory 的**可以如下定義:
public class humanfactory catch (exception e)
return (t)human;}}
其優點是簡單,缺點是工廠類的擴充套件比較困難,不符合開閉原則。 簡單工廠模式與工廠方法模式
簡單工廠模式是屬於建立型模式,又叫做 靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。百科 最大的優點是包...
簡單工廠模式與工廠方法模式
工廠模式是建立模式,主要是為建立物件提供過渡介面 以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。工廠模式在 深入淺出設計模式 和 大話設計模式 中分為三類 這三種模式從上到下逐步抽象,並且更具有一般性。我剛開始看著 大話設計模式 學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面...
簡單工廠模式與工廠方法模式
簡單工廠模式,以計算器為例,結構如圖 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。問題在於,如果增加乙個子功能,需要新增相應的子類外,還要修改原有的工廠類,增加case判斷,修改原有的類,這就違背了 開放 封...