老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

C#設計模式(3)——工廠方法模式-創新互聯

一、引言

在簡單工廠模式中講到簡單工廠模式的缺點,有一點是——簡單工廠模式系統難以擴展,一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過于復雜,然而本專題介紹的工廠方法模式可以解決簡單工廠模式中存在的這個問題,下面就具體看看工廠模式是如何解決該問題的。

公司主營業務:網站設計、成都網站建設、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯建站是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯建站推出寧波免費做網站回饋大家。

二、工廠方法模式的實現

工廠方法模式之所以可以解決簡單工廠的模式,是因為它的實現把具體產品的創建推遲到子類中,此時工廠類不再負責所有產品的創建,而只是給出具體工廠必須實現的接口,這樣工廠方法模式就可以允許系統不修改工廠類邏輯的情況下來添加新產品,這樣也就克服了簡單工廠模式中缺點。下面看下工廠模式的具體實現代碼(這里還是以簡單工廠模式中點菜的例子來實現):

namespace 設計模式之工廠方法模式
{
    /// 
    /// 菜抽象類
    /// 
    public abstract class Food
    {
        // 輸出點了什么菜
        public abstract void Print();
    }
    /// 
    /// 西紅柿炒雞蛋這道菜
    /// 
    public class TomatoScrambledEggs : Food
    {
        public override void Print()
        {
            Console.WriteLine("西紅柿炒蛋好了!");
        }
    }
    /// 
    /// 土豆肉絲這道菜
    /// 
    public class ShreddedPorkWithPotatoes : Food
    {
        public override void Print()
        {
            Console.WriteLine("土豆肉絲好了");
        }
    }
    /// 
    /// 抽象工廠類
    /// 
    public abstract class Creator
    {
        // 工廠方法
        public abstract Food CreateFoddFactory();
    }
    /// 
    /// 西紅柿炒蛋工廠類
    /// 
    public class TomatoScrambledEggsFactory:Creator
    {
        /// 
        /// 負責創建西紅柿炒蛋這道菜
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new TomatoScrambledEggs();
        }
    }
    /// 
    /// 土豆肉絲工廠類
    /// 
    public class ShreddedPorkWithPotatoesFactory:Creator
    {
        /// 
        /// 負責創建土豆肉絲這道菜
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new ShreddedPorkWithPotatoes();
        }
    }
    /// 
    /// 客戶端調用
    /// 
    class Client
    {
        static void Main(string[] args)
        {
            // 初始化做菜的兩個工廠()
            Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory();
            Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory();
            // 開始做西紅柿炒蛋
            Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory();
            tomatoScrambleEggs.Print();
            //開始做土豆肉絲
            Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory();
            shreddedPorkWithPotatoes.Print();
            Console.Read();
        }
    } 
}

使用工廠方法實現的系統,如果系統需要添加新產品時,我們可以利用多態性來完成系統的擴展,對于抽象工廠類和具體工廠中的代碼都不需要做任何改動。例如,我們我們還想點一個“肉末茄子”,此時我們只需要定義一個肉末茄子具體工廠類肉末茄子類就可以。而不用像簡單工廠模式中那樣去修改工廠類中的實現(具體指添加case語句)。具體代碼為:

/// 
    /// 肉末茄子這道菜
    /// 
    public class MincedMeatEggplant : Food
    {
        /// 
        /// 重寫抽象類中的方法
        /// 
        public override void Print()
        {
            Console.WriteLine("肉末茄子好了");
        }
    }
 /// 
    /// 肉末茄子工廠類,負責創建肉末茄子這道菜
    /// 
    public class MincedMeatEggplantFactory : Creator
    {
        /// 
        /// 負責創建肉末茄子這道菜
        /// 
        /// 
        public override Food CreateFoddFactory()
        {
            return new MincedMeatEggplant();
        }
    }
    /// 
    /// 客戶端調用
    /// 
    class Client
    {
        static void Main(string[] args)
        {
                   
            // 如果客戶又想點肉末茄子了
            // 再另外初始化一個肉末茄子工廠
            Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory();
            // 利用肉末茄子工廠來創建肉末茄子這道菜
            Food minceMeatEggplant = minceMeatEggplantFactor.CreateFoddFactory();
            minceMeatEggplant.Print();
            Console.Read();
        }
    }

三、工廠方法模式的UML圖

講解完工廠模式的具體實現之后,讓我們看下工廠模式中各類之間的UML圖:

C#設計模式(3)——工廠方法模式

從UML圖可以看出,在工廠方法模式中,工廠類與具體產品類具有平行的等級結構,它們之間是一一對應的。針對UML圖的解釋如下:

Creator類:充當抽象工廠角色,任何具體工廠都必須繼承該抽象類

TomatoScrambledEggsFactory和ShreddedPorkWithPotatoesFactory類:充當具體工廠角色,用來創建具體產品

Food類:充當抽象產品角色,具體產品的抽象類。任何具體產品都應該繼承該類

TomatoScrambledEggs和ShreddedPorkWithPotatoes類:充當具體產品角色,實現抽象產品類對定義的抽象方法,由具體工廠類創建,它們之間有一一對應的關系。

四、.NET中實現了工廠方法的類

.NET 類庫中也有很多實現了工廠方法的類,例如Asp.net中,處理程序對象是具體用來處理請求,當我們請求一個*.aspx的文件時,此時會映射到System.Web.UI.PageHandlerFactory類上進行處理,而對*.ashx的請求將映射到System.Web.UI.SimpleHandlerFactory類中(這兩個類都是繼承于IHttpHandlerFactory接口的),關于這點說明我們可以在“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Web.Config”文件中找到相關定義,具體定義如下:



            
            

下面我們就具體看下工廠方法模式在Asp.net中是如何實現的,如果對一個Index.aspx頁面發出請求時,將會調用PageHandlerFactory中GetHandler方法來創建一個Index.aspx對象,它們之間的類圖關系如下:

C#設計模式(3)——工廠方法模式

五、總結

工廠方法模式通過面向對象編程中的多態性來將對象的創建延遲到具體工廠中,從而解決了簡單工廠模式中存在的問題,也很好地符合了開放封閉原則(即對擴展開發,對修改封閉)。

附件:http://down.51cto.com/data/2363464

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。


分享標題:C#設計模式(3)——工廠方法模式-創新互聯
分享鏈接:http://www.xueling.net.cn/article/dijssi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 波多野结衣中文在线 | 国产产一区二区三区久久毛片国语 | 爱爱中文字幕 | 91精品观看91久久久久久国产 | 精品九九九九 | 日本精品久久久久中文 | h视频免费 | 小婕子伦流澡到高潮H | 日韩视频一区二区三区在线观看 | 被黑人猛躁10次高潮视频 | 推油少妇久久99久久99久久 | 人与动人物XXXX毛片老司机 | 中文字幕乱码久久午夜不卡 | 91精品国产综合久久久动漫日韩 | 思思久久96热在精品国产 | 欧洲成人免费视频 | 国内自拍视频在线播放 | 無码一区中文字幕少妇熟女 | 亚洲精品a在线观看 | 给我免费播放片观看视频 | 国内精品伊人久久久久影院麻豆 | 久久韩日| 亚洲天堂福利视频 | 久久亚洲精品中文字幕无码 | 深夜福利小视频在线观看 | 伊人黄色| 欧美日韩色老头 | 久热这里只有精品6 | 三级黄色的视频 | 国产AV国片精品有毛 | 大伊香蕉精品一区视频在线 | 免费的又色又爽又黄的视频本 | 91精品久久久久久综合乱菊 | 久久久久亚洲ai毛片换脸星大全 | 亚洲欧美综合久久久久久 | www.一区二区.com | 欧美日韩综合一区二区在线观看视频 | 精品一区二区网站 | 九七av| 亚洲爱爱视频 | 亚洲国产一区二区三区在线播 |