【
首先說說簡單工廠模式,我用現實中的汽車工廠舉例子,首先有個汽車類的介面叫做car,裡面有個開車的方法叫做drive(),然後有個吉利車的類叫做jili,實現了car的介面,還有個奇瑞車的類叫做qirui,也實現了car的介面(因為都是車嘛,當然能開了)。
inte***ce car
class jili implements car
pulic void drive()
}class qirui implements car
pulic void drive() }
那現在如果我要用jili這個類,最基本的方式就是
jili jili=new jili();
如果用qirui這個類,最基本的方式也是
qirui qirui=new qirui();
哦,那現在如果有個比亞迪車就得new biyadi();然後同樣有個drive()的方法,這樣每個都得new個汽車物件,但是其實吉利,奇瑞和比亞迪他們都屬於汽車,同樣都有drive()方法,那是不是我們能建立乙個生產汽車的工廠,然後你想要什麼汽車只要告訴工廠就可以,工廠就幫你生產了,這樣你不用管生產的細節工作(也就是new物件的過程),這樣會更好呢,到此,簡單工廠模式就出來了,簡單工廠模式就是建立具有相同特徵的類的例項,然後把建立汽車的方法靜態化,這樣就可以直接用工廠生產了,**如下
class ca***ctoryelse if("qirui".equals(carname))else if("biyadi".equals(carname))
}這就ok了,這樣如果你要生產出一台汽車,直接呼叫car car=ca***ctory.createcar("jili");就可以了。
這種工廠雖然挺好,但是如果我每次要加入乙個新車都得修改工廠類來加入新的判斷語句,這樣不符合開閉原則,所以慢慢人們又想出一種更加好的生產方式,這就是工廠方法模式。
首先我們把生產汽車的工廠類抽象出來當成乙個介面,
inte***ce ca***ctory
然後呢,讓具體工廠類實現這個生產汽車的介面,這樣就會有三個具體工廠,乙個是吉利車生產工廠,乙個是奇瑞車生產工廠,乙個是比亞迪車生產工廠
class jilifactory implements ca***ctory
}class qiruifactory implements ca***ctory
}
class biyadifactory implements ca***ctory
}
這樣做的好處就是如果我還要生產乙個長城汽車,不用去修改ca***ctory這個工廠,只需要再寫個長城工廠類去實現ca***ctory這個介面就可以了。這就是工廠方法模式,不過工廠方法模式和簡單工廠模式的各有優點,也不能就說工廠方法模式就好,關鍵在於看實際情況去決定用哪種模式。
隨著社會的進步,汽車種類也多了,比如分為越野車和跑車兩個系列,而工廠方法模式一般是針對於一種系列的抽象產品的生產,而把工廠方法模式進行擴充,變成可以對多種系列的產品進行生產,這就是抽象工廠模式了。
inte***ce yueyeche()
inte***ce paoche()
而吉利和奇瑞也都生產跑車和越野車,這樣大家就好理解了,跑車就是乙個抽象產品族,越野車也是乙個抽象產品族,而吉利跑車,吉利越野車,奇瑞跑車,奇瑞越野車是真正的類,這樣我們還有四個類
public jilipaoche implements paoche }
public qiruipaoche implements paoche
}public jiliyueyeche implements paoche
}
public qiruiyueyeche implements paoche
}
車的介面和類就定義好了,相信大家也理解什麼是產品族了,下面我們該看工廠怎麼實現了,首先還是向工廠方法模式那樣,有個生產汽車的工廠介面,不過我們對這個介面進行了一些擴充,因為car類分成了跑車和越野車,所有我們介面也就是能生產出跑車和越野車這兩種車型
inte***ce ca***ctory
和工廠方法一樣我們需要兩個真正的工廠類來生產真正的汽車,恩.....當然,吉利工廠可以生產吉利跑車和吉利越野車,奇瑞工廠可以生產奇瑞跑車和奇瑞越野車,**如下
class jilifactory implements ca***ctory
public static yueyeche createyueyeche()
}class qiruifactory implements ca***ctory
public static yueyeche createyueyeche()
}ok了,抽象工廠模式也完成了,大家如果想生產乙個吉利跑車,就可以jilifactory.createpaoche();這樣吉利跑車就出來了,不錯吧,同理如果我們還要乙個比亞迪的汽車工廠只要實現ca***ctory這個工廠就行了,**如下
class biyadifactory implements ca***ctory
public static yueyeche createyueyeche()
}相信大家應該理解了什麼是抽象工廠模式,不過具體什麼情況該如果選擇哪種模式,還需要多多學習,才能融會貫通。
java 工廠模式分析理解
1 普通工廠模式 建立乙個工廠類,對實現同一介面的不同類,根據不同的類別例項化不同的物件。介面類 public inte ce sender public void send public class printsend1implements sender public void send syst...
java中工廠模式
工廠模式 1.隱藏複雜的邏輯過程,只關心結果 分為 簡單工廠,工廠方法,抽象工廠 簡單工廠 1.產品介面 package com.gupaoedu.vip.factory 產品介面 汽車需要滿足一定的標準 public inte ce car2.具體的產品 package com.gupaoedu....
工廠模式理解
例如乙個基類pet有許多個子類,聲稱這個體系中的隨機物件,當這個體系不斷有新子類增加的時候,因為該繼承體系中已經存在了常規的基礎,所以就有可能出現問題 考慮一點,為每個子類增加靜態初始化器,但是問題是 靜態初始化器只能在類首先被載入的時候才能被呼叫,而生成器在其列表中如果沒有這個類,他就永遠不能被呼...