日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

23种设计模式之工厂方法模式

發(fā)布時間:2024/8/23 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式之工厂方法模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

工廠方法模式的定義

定義: 定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類. 工廠方法使一個類的實(shí)例化延遲到其子類

工廠方法模式的通用類圖:

?

其中 Product 負(fù)責(zé)產(chǎn)品的共性,實(shí)現(xiàn)對事物最抽象的定義; Creator 為抽象創(chuàng)建類, 也就是抽象工廠, 具體如何創(chuàng)建產(chǎn)品類是由具體的實(shí)現(xiàn)工廠 ConcreteCreator 完成的. 下面給出他們的代碼:

產(chǎn)品抽象類代碼:

?

具體產(chǎn)品類繼承自抽象產(chǎn)品類,抽象工廠負(fù)責(zé)定義產(chǎn)品對象的產(chǎn)生,代碼如下;

?

具體工廠類的實(shí)現(xiàn)代碼如下:

?

工廠方法模式的優(yōu)點(diǎn)

  • 良好的封裝性,代碼結(jié)構(gòu)清晰. 一個對象創(chuàng)建是有條件約束的, 如一個調(diào)用者需要一個具體的產(chǎn)品對象,只要知道產(chǎn)品的類名就可以了, 不用知道對象是如何創(chuàng)建的,降低模塊間的耦合
  • 工廠方法模式的擴(kuò)展性非常優(yōu)秀. 在增加產(chǎn)品類的情況下, 只要適當(dāng)?shù)男薷木唧w的工廠類或擴(kuò)展一個工廠類, 就可以完成"擁抱變化".
  • 屏蔽產(chǎn)品類. 產(chǎn)品類的實(shí)現(xiàn)如何變化,調(diào)用者都不需要關(guān)心,它只需要關(guān)心產(chǎn)品的接口, 只要接口保持不變, 系統(tǒng)中的上層模塊就不用發(fā)生變化. 因?yàn)楫a(chǎn)品類的實(shí)例化是由工廠類負(fù)責(zé)的,一個產(chǎn)品對象具體由哪一個產(chǎn)品生成是由工廠類決定的.
  • 工廠方法模式是典型的解耦框架. 高層模塊只需要知道產(chǎn)品的抽象類, 其他的實(shí)現(xiàn)類都不用關(guān)心.
  • 工廠方法模式的使用場景

  • 工廠方法模式是new一個對象的替代品,所以在所有需要生成對象的地方都可以使用,但是要考慮是否要增加一個工廠類進(jìn)行管理,增加代碼復(fù)雜度
  • 需要靈活的、可擴(kuò)展的框架時,可以考慮采用工廠方法模式.
  • 工廠方法模式可以用在異構(gòu)項(xiàng)目中,
  • 可以使用在測試驅(qū)動開發(fā)的框架下. 例如, 測試一個類A,就需要把與類A有關(guān)聯(lián)關(guān)系的類B也同時生產(chǎn)出來,我們可以使用工廠方法模式把類B虛擬出來,避免類A與類B的耦合.
  • 工廠方法模式的擴(kuò)展

    工廠方法模式有很多擴(kuò)展,而且與其他模式結(jié)合使用威力更大,下面介紹四種擴(kuò)展

    1.縮小為簡單工廠模式

    一個模塊僅需要一個工廠類,那就沒有必要把他產(chǎn)生出來,使用靜態(tài)方法就可以了,在使用的時候也就不用將類實(shí)例化, 直接使用即可. 調(diào)用者也比較簡單, 缺點(diǎn)是工廠類的擴(kuò)展比較困難, 不符合開閉原則

    2.升級為多個工廠類

    當(dāng)我們在做一個比較復(fù)雜的項(xiàng)目時,經(jīng)常會遇到初始化一個對象很耗費(fèi)精力的情況,所有的產(chǎn)品類都放到一個工廠方法中進(jìn)行初始化會使代碼結(jié)構(gòu)不清晰. 考慮到需要結(jié)構(gòu)清晰, 我們?yōu)槊總€產(chǎn)品定義一個創(chuàng)造者, 好處是創(chuàng)建類的職責(zé)清晰,而且結(jié)構(gòu)簡單, 但是給可擴(kuò)展性和可維護(hù)性帶來了一定的影響. 當(dāng)然, 在復(fù)雜的應(yīng)用中一般采用多工廠的方法, 然后再增加一個協(xié)調(diào)類, 避免調(diào)用者與各個子工廠交流,協(xié)調(diào)類的作用是封裝子工廠類,對高層模塊提供統(tǒng)一的訪問接口.

    3.替代單例模式

    當(dāng)類的構(gòu)造方法為私有時, 可以通過反射來創(chuàng)建一個實(shí)例,然后通過工廠獲得該類的唯一實(shí)例

    4.延遲初始化

    就是一個對象被消費(fèi)完畢后,并不立刻釋放,工廠類保持其初始狀態(tài),等待再次被使用.

    延遲加載框架是可以擴(kuò)展的, 例如限制某一個產(chǎn)品類的最大實(shí)例化數(shù)量,可以通過判斷Map中已有的對象數(shù)量來實(shí)現(xiàn),這樣的處理是非常有意義的.

    延遲加載還可以用在對象初始化比較復(fù)雜的情況下,例如硬件訪問,設(shè)計多方面的交互,則可以通過延遲加載降低對象的產(chǎn)生和銷毀帶來的復(fù)雜性


    工廠方法模式在項(xiàng)目中使用的非常頻繁,以至于很多代碼中都包含工廠方法模式. 而且工廠方法模式還可以與其它模式混合使用,變化出無窮的優(yōu)秀設(shè)計,這也正是軟件設(shè)計和開發(fā)的樂趣所在.

    總結(jié)

    以上是生活随笔為你收集整理的23种设计模式之工厂方法模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。