工廠模式屬於設計模式的一種,主要目的是解決使用者與產品之間的問題,向使用者隱藏構建產品的複雜過程,使得產生物件能夠批量、標準化。在spring中大量應用。
**結構可能分為三種模式:
簡單工廠模式
工廠方法模式
抽象工廠模式
類似於乙個工廠,只有一條生產線,這條生產線可以生產a產品也可以生產b產品,主要靠傳遞的引數來區分生產何種產品。結構如下圖,這種模式的缺點是引數的正確性可能無法保證,用於可能傳遞錯誤的引數進入生產線,導致報錯;
示例**如下。
簡單的產品類**
public
inte***ce
nanja
public
class
firenanja
implements
nanja
}public
class
waternanja
implements
nanja
}
簡單工廠模式
/**
* 簡單工廠,根據傳入的引數的不同決定生產何種產品
*/public
class
******nanjafactory
elseif(
"water"
.equals
(nanjatype)
)else
}public
static
void
main
(string[
] args)
}
簡單工廠模式在spring中有大量使用,beanfactory中就使用到了簡單工廠模式,通過傳入的引數name或者class的不同來決定返回什麼產品。這裡通過過載getbean方法提供多種獲取的方式,也是屬於通過不同引數決定生產什麼產品。
public
inte***ce
beanfactory
工廠方法的概念其實就是類似簡單工廠模式中的getbean方法,工廠物件用來生產產品的方法就是工廠方法,可能更加直觀的感受就是spring中的factorybean介面,getobject()就是工廠方法,專門用於生產某一種bean,簡單工廠模式的工廠方法可以生產多種bean。
對於呼叫者來說,隱藏了複雜的邏輯處理過程,呼叫 者只關心執行結果。 對於工廠來說要對結果負責,保證生產出符合規範的 產品
public
inte***ce
factorybean
}
抽象工廠模式看起來更像是簡單工廠模式的進一步細化,上面有說到簡單工廠模式通過引數來區分應該生產什麼物件,引數的正確傳遞依賴使用者。抽象工廠則通過進一步封裝,讓使用者不需要傳遞引數只需要選擇對應的方法來獲取對應的產品,相當於是開啟了多個生產線,分別生產a\b\c產品。
示例**,在原有**改造。
定義抽象工廠,拆分生產線,抽取公共邏輯。
public
abstract
class
abstractnanjafactory
public
abstract nanja getwater()
;public
abstract nanja getfire()
;}
實現抽象工廠,每條生產線呼叫公共邏輯,同時也有差異邏輯,最終生成對應物件。這裡也可以用兩個類分別繼承abstractnanjafactory進行實現兩個不同的生產方法,形成更加豐富的構造方式,這也是抽象處理**的好處。同時使用者只需要選擇相應的方法就可以構造相應的產品,不用擔心傳遞引數有誤。
public
class
nanjafactory
extends
abstractnanjafactory
@override
public nanja getfire()
public
static
void
main
(string[
] args)
}
觀察上面的**,可以看出抽象工廠模式的特點除了拆分了對應的生產職能,還有就是抽取公共的邏輯統一在抽象類中進行管理,還有就是抽象的方式通過多種實現類可以為同乙個產品的提供多種實現可能,例如getfire可以有多個實現類。抽象工廠模式是使用比較廣泛的模式,實際上很可能是跟簡單工廠模式混合使用,設計模式的使用是要適配場景進行使用,進行組合各種模式。
抽象工廠模式**的擴充套件性好,如果需要新增產品,可以增加乙個方法,然後做對應的繼承實現即可。當然如果**邏輯通過反射實現的話,新增任何產品都不用改**;例如spring中beanfactory管理bean,只是簡單工廠模式,不管來多少新的bean,都不需要改工廠類。
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
c 設計模式 之 工廠模式之 工廠模式
1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...