深入淺出之工廠模式

2021-08-26 02:48:55 字數 3012 閱讀 3473

首先說說簡單工廠模式,我用現實中的汽車工廠舉例子,首先有個汽車類的介面叫做car,裡面有個開車的方法叫做drive(),然後有個吉利車的類叫做jili,實現了car的介面,還有個奇瑞車的類叫做qirui,也實現了car的介面(因為都是車嘛,當然能開了)。

inte***ce carelse if("qirui".equals(carname))else if("biyadi".equals(carname)){

return new biyadi();

這就ok了,這樣如果你要生產出一台汽車,直接呼叫car car=ca***ctory.createcar("jili");就可以了。

這種工廠雖然挺好,但是如果我每次要加入乙個新車都得修改工廠類來加入新的判斷語句,這樣不符合開閉原則,所以慢慢人們又想出一種更加好的生產方式,這就是工廠方法模式。

首先我們把生產汽車的工廠類抽象出來當成乙個介面,

inte***ce ca***ctory{

public static car createcar();

然後呢,讓具體工廠類實現這個生產汽車的介面,這樣就會有三個具體工廠,乙個是吉利車生產工廠,乙個是奇瑞車生產工廠,乙個是比亞迪車生產工廠

class jilifactory  implements ca***ctory{

public static car createcar(){

return new jili();

class qiruifactory  implements ca***ctory{

public static car createcar(){

return new qirui();

class biyadifactory  implements ca***ctory{

public static car createcar(){

return new biyadi();

這樣做的好處就是如果我還要生產乙個長城汽車,不用去修改ca***ctory這個工廠,只需要再寫個長城工廠類去實現ca***ctory這個介面就可以了。這就是工廠方法模式,不過工廠方法模式和簡單工廠模式的各有優點,也不能就說工廠方法模式就好,關鍵在於看實際情況去決定用哪種模式。

隨著社會的進步,汽車種類也多了,比如分為越野車和跑車兩個系列,而工廠方法模式一般是針對於一種系列的抽象產品的生產,而把工廠方法模式進行擴充,變成可以對多種系列的產品進行生產,這就是抽象工廠模式了。

inte***ce yueyeche(){

public driveshanlu();

inte***ce paoche(){

public drivesailu();

而吉利和奇瑞也都生產跑車和越野車,這樣大家就好理解了,跑車就是乙個抽象產品族,越野車也是乙個抽象產品族,而吉利跑車,吉利越野車,奇瑞跑車,奇瑞越野車是真正的類,這樣我們還有四個類

public jilipaoche implements paoche{

public drivesailu(){

system.out.println("我在賽路開吉利跑車");  

public qiruipaoche implements paoche{

public drivesailu(){

system.out.println("我在賽路開奇瑞跑車");  

public jiliyueyeche implements paoche{

public drivesailu(){

system.out.println("我在山路開吉利越野車");  

public qiruiyueyeche implements paoche{

public drivesailu(){

system.out.println("我在山路開奇瑞越野車");  

車的介面和類就定義好了,相信大家也理解什麼是產品族了,下面我們該看工廠怎麼實現了,首先還是向工廠方法模式那樣,有個生產汽車的工廠介面,不過我們對這個介面進行了一些擴充,因為car類分成了跑車和越野車,所有我們介面也就是能生產出跑車和越野車這兩種車型

inte***ce ca***ctory{

public static paoche createpaoche();

public static yueyeche createyueyeche();

和工廠方法一樣我們需要兩個真正的工廠類來生產真正的汽車,恩.....當然,吉利工廠可以生產吉利跑車和吉利越野車,奇瑞工廠可以生產奇瑞跑車和奇瑞越野車,**如下

class jilifactory  implements ca***ctory{

public static paoche createpaoche(){

return new jilipaoche();

public static yueyeche createyueyeche(){

return new jiliyueyeche();

class qiruifactory  implements ca***ctory{

public static paoche createpaoche(){

return new qiruipaoche();

public static yueyeche createyueyeche(){

return new qiruiyueyeche();

ok了,抽象工廠模式也完成了,大家如果想生產乙個吉利跑車,就可以jilifactory.createpaoche();這樣吉利跑車就出來了,不錯吧,同理如果我們還要乙個比亞迪的汽車工廠只要實現ca***ctory這個工廠就行了,**如下

class biyadifactory  implements ca***ctory{

public static paoche createpaoche(){

return new biyadipaoche();

public static yueyeche createyueyeche(){

return new biyadiyueyeche();

相信大家應該理解了什麼是抽象工廠模式,不過具體什麼情況該如果選擇哪種模式,還需要多多學習,才能融會貫通。

深入淺出設計模式 工廠模式

披薩店新推出了點單系統,披薩需要通過不同的製作,相同的烘焙,裁剪等工序才能完成。披薩的種類實在太多了,在構造披薩例項時,光是if else 語句就長的可怕,修改與維護更令人頭疼。披薩子類繼承實現相同的基類,通過基類呼叫不同的子類,使得 具有一定的彈性,將構造子類放入業務 導致了子類與業務 的耦合,令...

深入淺出設計模式(二) 工廠模式

簡單工廠模式 factory pattern 又稱為靜態工廠方法 static factory method 它屬於建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。比如有乙個電腦商,目前生產聯想電腦...

深入淺出之STL

c stl 標準模板庫 是一套功能強大的 c 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量 鍊錶 佇列 棧。c 標準模板庫的核心包括以下三個元件 元件描述 容器 containers 容器是用來管理某一類物件的集合。c 提供了各種不同型別的容器,...