23种设计模式之工厂方法模式
工廠(chǎng)方法模式的定義
定義: 定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi). 工廠(chǎng)方法使一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)
工廠(chǎng)方法模式的通用類(lèi)圖:
?
其中 Product 負(fù)責(zé)產(chǎn)品的共性,實(shí)現(xiàn)對(duì)事物最抽象的定義; Creator 為抽象創(chuàng)建類(lèi), 也就是抽象工廠(chǎng), 具體如何創(chuàng)建產(chǎn)品類(lèi)是由具體的實(shí)現(xiàn)工廠(chǎng) ConcreteCreator 完成的. 下面給出他們的代碼:
產(chǎn)品抽象類(lèi)代碼:
?
具體產(chǎn)品類(lèi)繼承自抽象產(chǎn)品類(lèi),抽象工廠(chǎng)負(fù)責(zé)定義產(chǎn)品對(duì)象的產(chǎn)生,代碼如下;
?
具體工廠(chǎng)類(lèi)的實(shí)現(xiàn)代碼如下:
?
工廠(chǎng)方法模式的優(yōu)點(diǎn)
工廠(chǎng)方法模式的使用場(chǎng)景
工廠(chǎng)方法模式的擴(kuò)展
工廠(chǎng)方法模式有很多擴(kuò)展,而且與其他模式結(jié)合使用威力更大,下面介紹四種擴(kuò)展
1.縮小為簡(jiǎn)單工廠(chǎng)模式
一個(gè)模塊僅需要一個(gè)工廠(chǎng)類(lèi),那就沒(méi)有必要把他產(chǎn)生出來(lái),使用靜態(tài)方法就可以了,在使用的時(shí)候也就不用將類(lèi)實(shí)例化, 直接使用即可. 調(diào)用者也比較簡(jiǎn)單, 缺點(diǎn)是工廠(chǎng)類(lèi)的擴(kuò)展比較困難, 不符合開(kāi)閉原則
2.升級(jí)為多個(gè)工廠(chǎng)類(lèi)
當(dāng)我們?cè)谧鲆粋€(gè)比較復(fù)雜的項(xiàng)目時(shí),經(jīng)常會(huì)遇到初始化一個(gè)對(duì)象很耗費(fèi)精力的情況,所有的產(chǎn)品類(lèi)都放到一個(gè)工廠(chǎng)方法中進(jìn)行初始化會(huì)使代碼結(jié)構(gòu)不清晰. 考慮到需要結(jié)構(gòu)清晰, 我們?yōu)槊總€(gè)產(chǎn)品定義一個(gè)創(chuàng)造者, 好處是創(chuàng)建類(lèi)的職責(zé)清晰,而且結(jié)構(gòu)簡(jiǎn)單, 但是給可擴(kuò)展性和可維護(hù)性帶來(lái)了一定的影響. 當(dāng)然, 在復(fù)雜的應(yīng)用中一般采用多工廠(chǎng)的方法, 然后再增加一個(gè)協(xié)調(diào)類(lèi), 避免調(diào)用者與各個(gè)子工廠(chǎng)交流,協(xié)調(diào)類(lèi)的作用是封裝子工廠(chǎng)類(lèi),對(duì)高層模塊提供統(tǒng)一的訪(fǎng)問(wèn)接口.
3.替代單例模式
當(dāng)類(lèi)的構(gòu)造方法為私有時(shí), 可以通過(guò)反射來(lái)創(chuàng)建一個(gè)實(shí)例,然后通過(guò)工廠(chǎng)獲得該類(lèi)的唯一實(shí)例
4.延遲初始化
就是一個(gè)對(duì)象被消費(fèi)完畢后,并不立刻釋放,工廠(chǎng)類(lèi)保持其初始狀態(tài),等待再次被使用.
延遲加載框架是可以擴(kuò)展的, 例如限制某一個(gè)產(chǎn)品類(lèi)的最大實(shí)例化數(shù)量,可以通過(guò)判斷Map中已有的對(duì)象數(shù)量來(lái)實(shí)現(xiàn),這樣的處理是非常有意義的.
延遲加載還可以用在對(duì)象初始化比較復(fù)雜的情況下,例如硬件訪(fǎng)問(wèn),設(shè)計(jì)多方面的交互,則可以通過(guò)延遲加載降低對(duì)象的產(chǎn)生和銷(xiāo)毀帶來(lái)的復(fù)雜性
工廠(chǎng)方法模式在項(xiàng)目中使用的非常頻繁,以至于很多代碼中都包含工廠(chǎng)方法模式. 而且工廠(chǎng)方法模式還可以與其它模式混合使用,變化出無(wú)窮的優(yōu)秀設(shè)計(jì),這也正是軟件設(shè)計(jì)和開(kāi)發(fā)的樂(lè)趣所在.
總結(jié)
以上是生活随笔為你收集整理的23种设计模式之工厂方法模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机是如何进行时间同步的
- 下一篇: 23种设计模式之中介者模式