文章摘抄自網(wǎng)絡(luò)
?
工廠模式是類的創(chuàng)建模式,又叫做虛擬構(gòu)造(Virtual Constructor)模式或者多態(tài)性工廠(Polymorphic Factory)模式。
工廠方法模式的用意是定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類中。
?
工廠模式在《Java與模式》中分為三類:
1)簡(jiǎn)單工廠模式(Simple Factory):不利于產(chǎn)生系列產(chǎn)品;
2)工廠方法模式(Factory Method):又稱為多形性工廠;
3)抽象工廠模式(Abstract Factory):又稱為工具箱,產(chǎn)生產(chǎn)品族,但不利于產(chǎn)生新的產(chǎn)品;
? ? ? ? ? ? ?這三種模式從上到下逐步抽象,并且更具一般性。
? ? ? ? ? ? ?GOF在《設(shè)計(jì)模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡(jiǎn)單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。
?
一、簡(jiǎn)單工廠模式
簡(jiǎn)單工廠模式是類的創(chuàng)建模式,又叫靜態(tài)工廠方法模式(負(fù)責(zé)創(chuàng)建一般產(chǎn)品的類事例用的是一個(gè)靜態(tài)方法)。
這里有三個(gè)基本的圖形,Circle,Square,Triangle而每個(gè)基本的圖形都有被畫和被被擦出的方法,接口Shape就定義了所有圖形都同用的這兩個(gè)方法,ArtTracer類提供了一個(gè)靜態(tài)工廠方法,在客戶端調(diào)用的情況下,返回客戶端所需要的類事例,其他的代碼都比較簡(jiǎn)單,這里只給出ArtTracer類的代碼:
?
public class ArtTracer {
public static Shape factory(String witch) throw BadShapeException{
if(wicth.equals("Circle"){
return new Circle();
}
else if(wicth.equals("Square"){
return new Square();
}
else if(wicth.equals("Triangle"){
return new Triangle();
}else{
throw new BadShapeException(witch);
}
}
}
public class BadShapeException extends Exception{
public BdaShapeException(String witch){
super(witch);
}
}
?
從上面的代碼可以看出,在客戶端使用的時(shí)候你只要去調(diào)用ArtTrace類的工廠方法,返回你想要的類的事例,而不需要關(guān)心內(nèi)部實(shí)現(xiàn)以及這個(gè)類事例到底是怎樣生成的,當(dāng)你所調(diào)用的圖形是系統(tǒng)不支持的時(shí)候,將會(huì)給你拋出一個(gè)異常,簡(jiǎn)單工廠模式是根據(jù)傳入的參數(shù)來(lái)決定到底應(yīng)該創(chuàng)建那個(gè)類的事例出來(lái)。下圖是簡(jiǎn)單工廠模式的一般結(jié)構(gòu):
?
?
由上圖可以看出,簡(jiǎn)單工廠模式由,工廠角色,抽象產(chǎn)品角色,產(chǎn)品角色,這三部分:
工廠角色:這是工廠方法模式的核心,但客戶段調(diào)用他的工廠方法的時(shí)候,返回給客戶端的是產(chǎn)品角色的一個(gè)類事例。
抽象產(chǎn)品角色:定義了產(chǎn)品角色所共有的共性,通常由一個(gè)java接口或者是一個(gè)java抽象類。如果具體產(chǎn)品之間沒有共同的商業(yè)邏輯,就用java接口,如果有共同的商業(yè)邏輯,就用一個(gè)java抽象類。
產(chǎn)品角色:簡(jiǎn)單工廠方法所創(chuàng)建的任何一個(gè)對(duì)象都是這個(gè)角色的一個(gè)類事例。
?
角色之間是可以相互合并的,例如三個(gè)角色合并成一個(gè),就好象單例模式,單例模式自身是自己的工廠角色,但并不完全等同于單例模式,單例模式中的構(gòu)造方法是私有的。
簡(jiǎn)單工廠模式的缺點(diǎn)是當(dāng)在產(chǎn)品角色中再增加一個(gè)類的時(shí)候,工廠方法必須有發(fā)生響應(yīng)的改變,這就導(dǎo)致了擴(kuò)展性,不符合開-閉原則。
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

