工廠模式分為三種:簡(jiǎn)單工廠匀谣、工廠模式和抽象工廠模式鞠评。三者之間存在哪些異同呢夏块?先分別看看各個(gè)模式的特點(diǎn)
一北专、簡(jiǎn)單工廠模式:
實(shí)現(xiàn)了算法和界面的分離畦徘,也就是將業(yè)務(wù)邏輯和界面邏輯分開(kāi)了毕籽,降低了耦合度。
算法的封裝:??定義一個(gè)抽象的算法接口井辆,提供不同算法的公共接口方法关筒。其他具體算法繼承這個(gè)抽象類(lèi),并實(shí)現(xiàn)具體的算法杯缺。
簡(jiǎn)單工廠類(lèi):??作為一個(gè)獨(dú)立的類(lèi)蒸播,實(shí)現(xiàn)了針對(duì)不同的算法進(jìn)行實(shí)例化。
簡(jiǎn)單工廠的UML圖:
二萍肆、?????工廠模式:
????定義一個(gè)用于創(chuàng)建對(duì)象的接口袍榆,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。??遵循了開(kāi)放—封閉原則塘揣。
工廠模式的UML圖:
簡(jiǎn)單工廠與工廠模式的共同優(yōu)點(diǎn):
???????都集中封裝了對(duì)象的創(chuàng)建包雀,使得要更換對(duì)象時(shí)不需要做大的改動(dòng)就可實(shí)現(xiàn),降低了客戶端程序與產(chǎn)品對(duì)象的耦合亲铡。
工廠模式PK簡(jiǎn)單工廠模式:
1才写、工廠模式的優(yōu)點(diǎn):
工廠模式是簡(jiǎn)單工廠模式的進(jìn)一步抽象和推廣。它遵循了“開(kāi)放—封閉”原則奖蔓。
2赞草、簡(jiǎn)單工廠模式的優(yōu)點(diǎn):
簡(jiǎn)單工廠模式最大的優(yōu)點(diǎn)在于工廠類(lèi)中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類(lèi)吆鹤,對(duì)于客戶端來(lái)說(shuō)厨疙,去除了與具體產(chǎn)品的依賴。
3檀头、工廠模式的缺點(diǎn):
工廠方法把簡(jiǎn)單工廠的內(nèi)部邏輯判斷轉(zhuǎn)移到了客戶端代碼來(lái)執(zhí)行轰异;每增加一產(chǎn)品就要增加一個(gè)產(chǎn)品工廠的類(lèi),增加了額外的開(kāi)發(fā)量暑始。
4搭独、簡(jiǎn)單工廠的缺點(diǎn):
是沒(méi)有遵守開(kāi)放—封閉原則。所謂的“開(kāi)放-封閉”原則就是開(kāi)放接口廊镜,封閉修改牙肝。如果將來(lái)需要添加一個(gè)開(kāi)方的算法,那么,在簡(jiǎn)單工廠模式中配椭,就必須在簡(jiǎn)單工廠類(lèi)中添加相應(yīng)的判斷語(yǔ)句虫溜!另外,在簡(jiǎn)單工廠類(lèi)中利用了Switch語(yǔ)句股缸,這對(duì)程序的擴(kuò)展本身就不不利衡楞。
三、?????抽象工廠模式:
??提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口敦姻,而無(wú)需指定它們具體的類(lèi)瘾境。
??UML結(jié)構(gòu)圖:?
工廠模式和抽象工廠的區(qū)別:
只有一個(gè)User類(lèi)和User操作類(lèi)的時(shí)候,只需要工廠方法模式镰惦;?但數(shù)據(jù)庫(kù)中有很多的表迷守,而Sql和access又是兩大不同的分類(lèi),所以就延伸到了抽象工廠模式
??抽象工廠模式的優(yōu)點(diǎn):
????1旺入、易于交換產(chǎn)品系列兑凿,由于具體工廠類(lèi),在一個(gè)應(yīng)用程序中只需要在初始化的時(shí)候出現(xiàn)一次茵瘾,?這就使得改變一個(gè)應(yīng)用的具體工廠變得非常容易礼华,它只需改變具體工廠即可使用不同的產(chǎn)品配置。
????2龄捡、它讓具體的創(chuàng)建實(shí)例過(guò)程與客戶端分離卓嫂,客戶端是通過(guò)他們的抽象接口操縱實(shí)例,產(chǎn)品的具體類(lèi)名也被具體工廠的實(shí)現(xiàn)分離聘殖,不會(huì)出現(xiàn)在客戶端代碼中。
??抽象模式的缺點(diǎn):
????1行瑞、抽象模式雖然便于兩數(shù)據(jù)庫(kù)之間的切換奸腺,但是不便于增加需求功能。
2血久、如果有100個(gè)調(diào)用數(shù)據(jù)庫(kù)訪問(wèn)的類(lèi)突照,就需要多次實(shí)例化100此具體工廠類(lèi)。
抽象工廠模式氧吐、反射以及配置文件:
????反射方法的實(shí)質(zhì)是在對(duì)象實(shí)例化的時(shí)候傳引用讹蘑,將程序由編譯時(shí)轉(zhuǎn)為運(yùn)行時(shí),通過(guò)字符串變量來(lái)處理筑舅,去除了座慰、switch判斷的麻煩。但是如果數(shù)據(jù)庫(kù)在更換時(shí)翠拣,還需要去修改程序(字符串的值)重編譯版仔。
????通過(guò)添加配置文件可以解決更改DataAccess的問(wèn)題。
來(lái)自http://lvxingzhelimin.blog.163.com/blog/static/170716550201110852956542/