真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中怎么實(shí)現(xiàn)工廠方法模式

C#中怎么實(shí)現(xiàn)工廠方法模式,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、武陟網(wǎng)絡(luò)推廣、成都小程序開發(fā)、武陟網(wǎng)絡(luò)營(yíng)銷、武陟企業(yè)策劃、武陟品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供武陟建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

工廠方法模式的胡介紹


      2.1、動(dòng)機(jī)(Motivate)

           在軟件系統(tǒng)的構(gòu)建過程中,經(jīng)常面臨著“某個(gè)對(duì)象”的創(chuàng)建工作:由于需求的變化,這個(gè)對(duì)象(的具體實(shí)現(xiàn))經(jīng)常面臨著劇烈的變化,但是它卻擁有比較穩(wěn)定的接口

    如何應(yīng)對(duì)這種變化?如何提供一種“封裝機(jī)制”來隔離出“這個(gè)易變對(duì)象”的變化,從而保持系統(tǒng)中“其他依賴對(duì)象的對(duì)象”不隨著需求改變而改變?

      2.2、意圖(Intent)

          
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。Factory Method使得一個(gè)類的實(shí)例化延遲到子類。                                        --《設(shè)計(jì)模式》GoF

      2.3、結(jié)構(gòu)圖(Structure)

           C#中怎么實(shí)現(xiàn)工廠方法模式

     2.4、模式的組成

          可以看出,在工廠方法模式的結(jié)構(gòu)圖有以下角色:

          (1)、抽象工廠角色(Creator): 
充當(dāng)抽象工廠角色,定義工廠類所具有的基本的操作,任何具體工廠都必須繼承該抽象類。

          (2)、具體工廠角色(ConcreteCreator):充當(dāng)具體工廠角色,該類必須繼承抽象工廠角色,實(shí)現(xiàn)抽象工廠定義的方法,用來創(chuàng)建具體產(chǎn)品。

          (3)、抽象產(chǎn)品角色(Product):充當(dāng)抽象產(chǎn)品角色,定義了產(chǎn)品類型所有具有的基本操作,具體產(chǎn)品必須繼承該抽象類。

          (4)、具體產(chǎn)品角色(ConcreteProduct):充當(dāng)具體產(chǎn)品角色,實(shí)現(xiàn)抽象產(chǎn)品類對(duì)定義的抽象方法,由具體工廠類創(chuàng)建,它們之間有一一對(duì)應(yīng)的關(guān)系。

     2.5、工廠方法模式的代碼實(shí)現(xiàn)

         【簡(jiǎn)單工廠模式】的問題是:如果有新的需求就需要修改工廠類里面創(chuàng)建產(chǎn)品對(duì)象實(shí)例的那個(gè)方法的實(shí)現(xiàn)代碼,在面向?qū)ο笤O(shè)計(jì)一個(gè)原則就是哪里有變化,我就封裝哪里。還有另外兩個(gè)大的原則,其一是:面向抽象編程,細(xì)節(jié)和高層實(shí)現(xiàn)都要依賴抽象,第二個(gè)原則是:多組合,少繼承。這三個(gè)原則是最根本的原則,學(xué)習(xí)設(shè)計(jì)模式必須以這三個(gè)原則為基點(diǎn),否則都是枉然。根據(jù)這三大原則又衍生出來6個(gè)具體的原則,分別是【單一職責(zé)原則】,【里氏替換原則】,【依賴倒置原則】,【接口隔離原則】、【迪米特法則】和【開閉原則】,既然工廠類有變化,我們就封裝它,面向抽象編程,我們先抽象出一個(gè)工廠基類,然后,每個(gè)需求就實(shí)現(xiàn)一個(gè)具體的工廠類,這樣我們就符合了【開閉原則OCP】,讓一個(gè)工廠生產(chǎn)一款產(chǎn)品,并一一對(duì)應(yīng)。我們把具體產(chǎn)品的創(chuàng)建推遲到子類中,此時(shí)工廠類(這類是基類了)不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而只是給出具體工廠必須實(shí)現(xiàn)的接口,這樣工廠方法模式就可以允許系統(tǒng)不修改工廠類邏輯的情況下來添加新產(chǎn)品,這樣也就克服了簡(jiǎn)單工廠模式中缺點(diǎn)。下面就是工廠方法模式的實(shí)現(xiàn)代碼:

C#中怎么實(shí)現(xiàn)工廠方法模式

C#中怎么實(shí)現(xiàn)工廠方法模式

C#中怎么實(shí)現(xiàn)工廠方法模式

C#中怎么實(shí)現(xiàn)工廠方法模式

    在【工廠方法模式】中,我們同樣也把汽車的類抽象出來一個(gè)抽象的基類,這里正好符合了【面向抽象編程】,客戶端在使用的時(shí)候不會(huì)依賴具體的什么汽車。使用工廠方法實(shí)現(xiàn)的系統(tǒng),如果系統(tǒng)需要添加新產(chǎn)品時(shí),我們可以利用多態(tài)性來完成系統(tǒng)的擴(kuò)展,對(duì)于抽象工廠類和具體工廠中的代碼都不需要做任何改動(dòng)。例如,我們想增加一輛奔馳車,我們只需從Car抽象類下繼承一個(gè)BenChiCar類,同時(shí)在從Factory抽象基類下繼承一個(gè)“奔馳”的工廠類BenChinaCarFactory就可以了,這樣擴(kuò)展符合OCP的原則。具體代碼為:

C#中怎么實(shí)現(xiàn)工廠方法模式

C#中怎么實(shí)現(xiàn)工廠方法模式

三、Factory Method模式的幾個(gè)要點(diǎn)

Factory Method模式主要用于隔離類對(duì)象的使用者和具體類型之間的耦合關(guān)系。面對(duì)一個(gè)經(jīng)常變化的具體類型,緊耦合關(guān)系會(huì)導(dǎo)致軟件的脆弱。

Factory Method模式通過面向?qū)ο蟮氖址?,將所要?jiǎng)?chuàng)建的具體對(duì)象工作延遲到子類,從而實(shí)現(xiàn)一種擴(kuò)展(而非更改)的策略,較好地解決了這種緊耦合關(guān)系。

      Factory Method模式解決“單個(gè)對(duì)象”的需求變化;

      AbstractFactory模式解決“系列對(duì)象”的需求變化;

      Builder模式解決“對(duì)象部分”的需求變化;

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

           (1)、 在工廠方法中,用戶只需要知道所要產(chǎn)品的具體工廠,無須關(guān)系具體的創(chuàng)建過程,甚至不需要具體產(chǎn)品類的類名。

           (2)、在系統(tǒng)增加新的產(chǎn)品時(shí),我們只需要添加一個(gè)具體產(chǎn)品類和對(duì)應(yīng)的實(shí)現(xiàn)工廠,無需對(duì)原工廠進(jìn)行任何修改,很好地符合了“開閉原則”。

        3.2】、工廠方法模式的缺點(diǎn):

           (1)、每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類和對(duì)象實(shí)現(xiàn)工廠,是的系統(tǒng)中類的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類的依賴。這并不是什么好事。

        3.3】、工廠方法模式使用的場(chǎng)景:

            (1)、一個(gè)類不知道它所需要的對(duì)象的類。在工廠方法模式中,我們不需要具體產(chǎn)品的類名,我們只需要知道創(chuàng)建它的具體工廠即可。

            (2)、一個(gè)類通過其子類來指定創(chuàng)建那個(gè)對(duì)象。在工廠方法模式中,對(duì)于抽象工廠類只需要提供一個(gè)創(chuàng)建產(chǎn)品的接口,而由其子類來確定具體要?jiǎng)?chuàng)建的對(duì)象,在程序運(yùn)行時(shí),子類對(duì)象將覆蓋父類對(duì)象,從而使得系統(tǒng)更容易擴(kuò)展。

            (3)、將創(chuàng)建對(duì)象的任務(wù)委托給多個(gè)工廠子類中的某一個(gè),客戶端在使用時(shí)可以無須關(guān)心是哪一個(gè)工廠子類創(chuàng)建產(chǎn)品子類,需要時(shí)再動(dòng)態(tài)指定。

四、.NET中實(shí)現(xiàn)了工廠方法的類

.NET 類庫(kù)中也有很多實(shí)現(xiàn)了工廠方法的類,例如Asp.net中,處理程序?qū)ο笫蔷唧w用來處理請(qǐng)求,當(dāng)我們請(qǐng)求一個(gè)*.aspx的文件時(shí),此時(shí)會(huì)映射到System.Web.UI.PageHandlerFactory類上進(jìn)行處理,而對(duì)*.ashx的請(qǐng)求將映射到System.Web.UI.SimpleHandlerFactory類中(這兩個(gè)類都是繼承于IHttpHandlerFactory接口的),關(guān)于這點(diǎn)說明我們可以在“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Web.Config”文件中找到相關(guān)定義,具體定義如下:

C#中怎么實(shí)現(xiàn)工廠方法模式

配置文件截圖了一部分,有時(shí)間大家可以自己去研究一下。
下面我們就具體看下工廠方法模式在Asp.net中是如何實(shí)現(xiàn)的,如果對(duì)一個(gè)Index.aspx頁(yè)面發(fā)出請(qǐng)求時(shí),將會(huì)調(diào)用PageHandlerFactory中GetHandler方法來創(chuàng)建一個(gè)Index.aspx對(duì)象,它們之間的類圖關(guān)系如下:

C#中怎么實(shí)現(xiàn)工廠方法模式

關(guān)于C#中怎么實(shí)現(xiàn)工廠方法模式問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


本文名稱:C#中怎么實(shí)現(xiàn)工廠方法模式
網(wǎng)頁(yè)路徑:http://weahome.cn/article/jedhci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部