【
首先說說簡單工廠模式,我用現實中的汽車工廠舉例子,首先有個汽車類的介面叫做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()
}相信大家應該理解了什麼是抽象工廠模式,不過具體什麼情況該如果選擇哪種模式,還需要多多學習,才能融會貫通。
設計模式 工廠模式(學習筆記)
披薩專案 要方便專案的擴充套件,要便於維護 要能執行時擴充套件。披薩族設計 不足之處 披薩只能prepare bake cut box操作,增加新功能需要更改原始抽象類,程式擴充套件性低。簡單工廠模式的設計方案 定義乙個例項化披薩物件的類,封裝建立物件的 將例項部分與抽象超類分隔開,放在工廠裡提高擴...
簡單工廠模式學習筆記
最近開始看點設計模式,由於我這人腦袋有點笨所以簡單工廠模式也是看了幾遍才慢慢領悟點意思出來。所以在這裡記錄下來好日後翻閱。簡單工廠模式又叫做靜態工廠方法 staticfactory method 模式,簡單的來說就是利用乙個工廠類來操作處理返回例項化物件。這個工廠就像乙個小工廠一樣來生產會產品。下面...
抽象工廠模式 學習筆記
1.抽象工廠模式 是對產品角色的抽象,面對的問題是多個產品等級結構的系統設計,這是與工廠方法模式最大的區別 工廠方法模式面對的是乙個產品等級結構 如果使用多個工廠方法模式來實現,會導致相似的工廠方法的數目越來越多。2.要建立乙個具體產品物件,需先指明產品等級結構 乙個產品系列button,textv...