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