工廠模式,是各種開源框架中常用的設計模式,比如spring的ioc,log4j等。
工廠模式有三種,簡單工廠模式,工廠方法模式,抽象工廠模式,下面我們一一介紹,
簡單工廠模式
簡單工廠模式就是工廠模式最簡單的用法,缺點比較明顯,可擴充套件性不好,解耦性不強,不符合開閉原則和職責單一原則,
可以理解為簡單工廠模式就是乙個小作坊,來什麼訂單,我就做什麼,沒有工具我就去現買工具。下面我通過**來看。
//先定義汽車介面和汽車類
public inte***ce icar
public class dazhongcar implements icar
public class bencicar implements icar
//我們開了乙個汽車廠,要生產汽車。
public class ca***ctory
if ("benci".equals(carname))
return null;
} //這裡使用者通過汽車的型別告訴我們,我要生產什麼牌子的汽車
public static icar getcarbytype(string cartype)
} catch (classnotfoundexception | illegalacces***ception | instantiationexception e)
return null;
}}
我們可以看到,如果訂單來了我們可以做這個汽車,那就生產汽車,如果不行,那就沒有辦法了,只能去改**,增加新的方法,增加新的判斷。這完全不符合開閉原則。而且乙個工廠又可以生產賓士的汽車還可以生產大眾的汽車,這也不符合職責單一原則。但是他的優點是 使用者看不到我們生產的過程,他需要下訂單,不需要管汽車是怎麼來的,只需要直接跟工廠對接就ok了,這就是簡單工廠模式。接下來看符合開閉原則和職責單一原則的工廠方法模式。
工廠方法模式可以理解為對簡單工廠模式的完善,我們從上面的**引申一下,我們定義乙個工廠介面,介面裡定義乙個方法,所有的工廠都要實現這個介面。接下來還是看**
//定義乙個介面
public inte***ce ica***ctory
//定義賓士的工廠只生產賓士車
public class bencica***ctory implements ica***ctory
}//定義大眾的工廠,只生產大眾車
public class dazhongca***ctory implements ica***ctory
}
ok,從**我們可以看出來了吧,如果再有奧迪的訂單,就建立乙個奧迪的工廠,不需要修改賓士和大眾的工廠了就,完全符合開閉原則和職責單一原則,但是有個缺點就是會有好多個工廠,不過沒有完美的設計模式,所有的設計模式都是由缺點的,然後我們接下來看抽象工廠模式。
抽象工廠模式 是這樣的,現在我們有了乙個新的訂單,不是大眾車,也不是賓士車,但是這個訂單需要大眾車的發動起和賓士車的輪胎。這就需要細化生產過程了。然後還是看**。
public inte***ce ica***ctory
//賓士車廠
public class benciica***ctory implements ica***ctory
@override
public ishoe createshoe()
}//大眾車廠
public class dazhongca***ctory implements ica***ctory
@override
public ishoe createshoe()
}
上面的**我們可以看到了,工廠現在不生產車了,而是生產零件,這樣的話,就可以完成這個組裝車的訂單了。抽象工廠模式主要是解決了乙個產品族和產品等級結構的問題。同樣有缺點,也不符合開閉原則,每當有個新零件的時候,我們需要修改工廠的介面,而且要修改全部的工廠類,是個很大的工程,所以這個抽象工廠模式一定要慎用!!然後給出uml圖
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...