Java設計模式——工廠設計模式
來源:程序員人生 發布時間:2017-02-15 09:11:30 閱讀次數:3185次
學習Java的同學注意了!!!
學習進程中遇到甚么問題或想獲得學習資源的話,歡迎加入Java學習交換群,群號碼:183993990 我們1起學Java!
工廠模式:主要用來實例化有共同接口的類,工廠模式可以動態決定應當實例化那1個類。
工廠模式的形態
工廠模式主要用1下幾種形態:
1:簡單工廠(Simple Factory)。
2:工廠方法(Factory Method)。
3:抽象工廠(Abstract Factory)。
簡單工廠(Simple Factory)
又叫靜態工廠,是工廠模式3中狀態中結構最為簡單的。主要有1個靜態方法,用來接受參數,并根據參數來決定返回實現同1接口的不同類的實例。我們來看1個具體的例子:
假定1家工廠,幾生產洗衣機,有生產冰箱,還有空調等等..
我們先為所有產品定義1個共同的產品接口
-
public interface Product{}
接著我們讓這個工廠的所有產品都必須實現此接口
-
public class Washer implements Product{
-
public Washer(){
-
System.out.println("洗衣機被制造了");
-
}
-
}
-
-
public class Icebox implements Product{
-
public Icebox(){
-
System.out.println("冰箱被制造了");
-
}
-
}
-
-
public class AirCondition implements Product{
-
public Icebox(){
-
System.out.println("空調被制造了");
-
}
-
}
接下來我們來寫1個工廠類,有它來負責生產以上的產品
-
public class SimpleFactory
{
-
-
public static Product
factory(String productName) throws Exception{
-
if(productName.equals("Washer")){
-
return new Washer();
-
}else if(productName.equals("Icebox")){
-
return new Icebox();
-
}else if(productName.equals("AirCondition")){
-
return new AirCondition();
-
}else{
-
throw new Exception("沒有該產品");
-
}
-
}
-
}
好了,有了這個工廠類,我們就能夠開始下訂單了,SimpleFactory將根據不同的訂單類決定生產甚么產品。
-
public static void main(String[]
args) {
-
try {
-
SimpleFactory.factory("Washer");
-
SimpleFactory.factory("Icebox");
-
SimpleFactory.factory("AirCondition");
-
} catch (Exception
e) {
-
e.printStackTrace();
-
}
-
}
由上面的代碼可以看出,簡單工廠的核心就是1個SimpleFactory類,他具有必要的邏輯判斷能力和所有產品的創建權利,我們只需要向把訂單給他,就可以得到我們想要的產品。這使用起來似乎非常方便。
但,實際上,這個SimpleFactory有很多的局限。首先,我們每次想要增加1種新產品的時候,都必須修改SimpleFactory的原代碼。其次,當我們具有很多很多產品的時候,而且產品之間又存在復雜的層次關系的時候,這個類必須具有復雜的邏輯判斷能力,其代碼量也將不斷地激增,這對以后的保護簡直就是恐怖兩個字...
還有就是,全部系統都嚴重依賴SimpleFactory類,只要SimpleFactory類1出問題,系統就進入不能工作的狀態,這也是最為致命的1點....
以上的不足將在工廠模式的另外兩種狀態中得到解決。
工廠方法(Factory Method)
上面的代碼告知我們,簡單工廠其實不簡單,它是全部模式的核心,1旦他出了問題,全部模式都將受影響而不能工作,為了下降風險和為往后的保護、擴大做準備,我們需要對它進行重構,引入工廠方法。
工廠方法為工廠類定義了接口,用多態來削弱了工廠類的職能,以下是工廠接口的定義:
-
public interface Factory{
-
public Product
create();
-
}
我們再來定義1個產品接口
-
public interface Product{}
1下是實現了產品接口的產品類
-
public class Washer implements Product{
-
public Washer(){
-
System.out.println("洗衣機被制造了");
-
}
-
}
-
-
public class Icebox implements Product{
-
public Icebox(){
-
System.out.println("冰箱被制造了");
-
}
-
}
-
-
public class AirCondition implements Product{
-
public Icebox(){
-
System.out.println("空調被制造了");
-
}
-
}
接下來,就是工廠方法的核心部份,也就是具體創建產品對象的具體工廠類,
-
-
public class CreateWasher implements Factory{
-
public Product
create(){
-
return new Washer();
-
}
-
}
-
-
-
public class CreateIcebox implements Factory{
-
public Product
create(){
-
return new Icebox();
-
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈