亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

深入c#工廠模式的詳解

2020-01-24 03:16:22
字體:
來源:轉載
供稿:網友
什么是工廠模式?
類比生活中的概念,當我們需要打電話的時候,我們需要一部手機,我們通常會選擇直接去賣手機的實體店買。但在程序設計中,當我們需要調用一個類(PhoneA或PhoneB)的方法的時候,我們往往還要關心他是怎么new出來的(見代碼段1)。這就好比我們自己還要去工廠里面告訴他們你要怎么生產出一部我需要的手機。而我們只關心他能不能打電話,你怎么做的關我屁事。所以這就有了工廠模式。工廠模式其實就是抽象出一個工廠,我需要什么手機,去哪個工廠買就行了。我不必關心他的制作過程,你只要能生產我要的功能的手機就行。所以我們需要引入簡單工廠,讓我們不用再關心手機怎么生產的,具體代碼的實現見代碼段2
復制代碼 代碼如下:

public class Customer
{
    public void CallSomeOne(){
        PhoneA p1 = new PhoneA();
        p1.Call();
    }
}
public class PhoneA
{
    public void Call(){}
}
public class PhoneB
{
    public void Call(){}
}

代碼段1 :通常的調用類方法的方式
復制代碼 代碼如下:

using System;
namespace Example1
{
    public interface IProduct { }
    public class PhoneA : IProduct { }
    public class PhoneB : IProduct { }
    public class Factory
    {
        public IProduct Create()
        {
            // 工廠決定到底實例化哪個子類。
            return new PhonetA ();
        }
    }
}
using System;
namespace Example1
{
    public enum Category
    {
        A,

    }
    public static class ProductFactory
    {
        public static IProduct Create(Category category)
        {
            switch (category)
            {
                case Category.A:
                    return new PhoneA();
                case Category.B:
                    return new PhoneB();
                default:
                    throw new NotSupportedException();
            }
        }
    }
}

代碼段2:簡單工廠模式的實現
復制代碼 代碼如下:

[TestMethod]
        public void Test()
        {
            Factory factory = new Factory();
            IProduct phone = factory.Create();   
            Assert.AreEqual<Type>(phone.GetType(), typeof(PhoneA));
        }

代碼段3:對簡單工廠模式的測試
新的問題
其實剛剛也提到了,我們只要一只能打電話的手機,我就想去實體店買一下,我才不關心是哪個工廠生產的呢~而在簡單工廠中,我們還需要關心是哪個工廠生產的(見代碼段3)。所以我們在代碼里面實現一個實體店,這樣我們就不用關心到底是哪個工廠生產的啦。所以我們需要引入抽象工廠,這樣我們只需要跟實體店打交道,不要再關心要去找什么工廠拿手機了。具體的實現見代碼段4.我們可以利用配置文件實現對工廠的選擇,對產品的選擇,因為本文不想引入其他的概念,這里就不討論了。
復制代碼 代碼如下:

namespace Example2
{
    /// <summary>
    /// 抽象的工廠類型特性描述
    /// </summary>
    public interface IFactory
    {
        IProduct Create();  //  每個工廠所需要具有的工廠方法――創建產品
    }
    /// <summary>
    /// 實體工廠類型
    /// </summary>
    public class FactoryA : IFactory
    {
        public IProduct Create()
        {
            return new PhoneA();
        }
    }
    /// <summary>
    /// 實體工廠類型
    /// </summary>
    public class FactoryB : IFactory
    {
        public IProduct Create()
        {
            return new PhoneB();
        }
    }
}
using System;
using System.Diagnostics;
namespace Example2
{
    class Client
    {
        public void SomeMethod()
        {
            IFactory factory = new FactoryA();   // 獲得了抽象Factory的同時,與FactoryA產生依賴;
            IProduct Phone = factory.Create(); // 后續操作僅以來抽象的IFactory和IProduct完成
            // ...
        }
        private IFactory factory;
        public Client(IFactory factory)     // 將IFactory通過Setter方式注入
        {
            if (factory == null) throw new ArgumentNullException("factory");
            this.factory = factory;
        }
        public void AnotherMethod()
        {
            IProduct Phone = factory.Create();
            // ... ...
        }
    }
}

小結
1、工廠方法模式注重的是整體對象的創建方法
2、工廠方法的意圖非常明確,它把類的實例化過程延遲到子類,將new()的工作交給工廠 完成。
同時,增加一個抽象的工廠定義,解決一系列具有統一通用工廠方法的實體工廠問題。 在.NET 平臺中,我們可以借助配置、泛型和委托的方法在實現經典模式目的的同時,獲得工廠類型與客戶程序間更加松散的構造過程。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲a中文字幕| 欧美国产在线电影| 国产va免费精品高清在线| 亚洲成年人影院在线| 亚洲综合自拍一区| 欧美一区二区大胆人体摄影专业网站| 国产精品视频最多的网站| 91福利视频网| 精品久久久久久久中文字幕| 亚洲欧美国内爽妇网| 成人av资源在线播放| 91成人性视频| 久久久久久久久爱| 国产精品欧美激情在线播放| 国产丝袜高跟一区| 欧美电影在线免费观看网站| 日韩av电影手机在线观看| 午夜精品久久久久久久久久久久久| 色婷婷成人综合| 久久久久免费精品国产| 81精品国产乱码久久久久久| 久久久之久亚州精品露出| 亚洲精品资源美女情侣酒店| 亚洲精品国偷自产在线99热| 亚洲曰本av电影| 动漫精品一区二区| 国产精品成人av性教育| 日韩欧美精品中文字幕| 久久精品91久久香蕉加勒比| 一级做a爰片久久毛片美女图片| 好吊成人免视频| 亚洲加勒比久久88色综合| 91在线免费观看网站| 国产三级精品网站| 孩xxxx性bbbb欧美| 亚洲福利视频免费观看| 欧美激情一级精品国产| 色综合五月天导航| 久久网福利资源网站| 狠狠色噜噜狠狠狠狠97| 夜夜嗨av色综合久久久综合网| 国产精品高潮呻吟视频| 欧美激情亚洲综合一区| 久久理论片午夜琪琪电影网| 国产一区二区在线免费| 欧美xxxx做受欧美.88| 91中文字幕在线观看| 国外成人免费在线播放| 亚洲精品美女在线观看| 日韩成人中文字幕| 国产精品热视频| 国产精品日本精品| 欧美裸体xxxxx| 中文字幕日韩专区| 91中文在线观看| 欧美午夜丰满在线18影院| 成人av在线亚洲| 日韩在线中文字| 日韩午夜在线视频| 91在线高清免费观看| 九九热视频这里只有精品| 欧美性xxxx极品hd满灌| 国产精品麻豆va在线播放| 国产一区在线播放| 久久久极品av| 91夜夜揉人人捏人人添红杏| 91禁外国网站| 久久69精品久久久久久久电影好| 亚洲第一中文字幕| 国产精品九九九| 精品国产乱码久久久久久婷婷| 欧美精品手机在线| 久久男人的天堂| 久久久久国产精品www| 欧美另类99xxxxx| 国产精品久久久久国产a级| 性色av一区二区三区红粉影视| 久久在线免费观看视频| 97色在线视频观看| 日韩av免费观影| 国产精品久久久久久搜索| 福利视频导航一区| 日韩一区二区在线视频| 日韩精品小视频| 久久久久久久爱| 国产一区二区三区免费视频| 国产日韩精品综合网站| 日本亚洲欧洲色| 久久久久免费视频| 国产美女精品免费电影| 91在线视频导航| 97不卡在线视频| 国产精品影院在线观看| 久久精品国产亚洲精品| 亚洲一区二区三区四区在线播放| 久久久久久久国产精品视频| 欧美超级免费视 在线| 亚洲精品久久久久国产| 欧美丰满老妇厨房牲生活| 亚洲精品久久久久久久久| 日韩hd视频在线观看| 久久久免费精品| 欧美一级bbbbb性bbbb喷潮片| 国产欧美日韩中文字幕| 久久久久久久久久av| 亚洲欧美在线第一页| 国产在线视频欧美| 色多多国产成人永久免费网站| 第一福利永久视频精品| 国产精品第一第二| 午夜精品一区二区三区在线播放| 日本视频久久久| 亚洲精品一区二三区不卡| 日韩av电影院| 国产精品综合不卡av| 欧美另类在线播放| 日韩视频在线一区| 欧美激情欧美激情| 欧美专区福利在线| 欧美激情视频在线| 国产经典一区二区| 精品无人国产偷自产在线| 亚洲最大福利网站| 欧美日韩免费网站| 66m—66摸成人免费视频| 亚洲欧美精品中文字幕在线| 九九热精品视频| 欧美一二三视频| 日韩欧美大尺度| 91在线观看免费高清完整版在线观看| 91精品国产综合久久香蕉的用户体验| 亚洲国产精品人久久电影| 欧美激情啊啊啊| 亚洲人成在线播放| 成人啪啪免费看| 欧美床上激情在线观看| 国产精品男人爽免费视频1| 久久亚洲国产精品成人av秋霞| 亚洲精品有码在线| 日韩有码在线视频| 亚洲自拍高清视频网站| 亚洲风情亚aⅴ在线发布| 97激碰免费视频| 欧美日韩激情小视频| 亚洲欧美在线磁力| 日韩在线视频一区| 欧美精品成人91久久久久久久| 一区二区三区无码高清视频| 国产精品综合久久久| 久久久久久国产精品| 亚洲精品日韩在线| 91精品综合视频| 91在线播放国产| 97在线视频免费| 91香蕉国产在线观看| 岛国av午夜精品| 中文字幕免费精品一区高清| 久久九九免费视频| 国产精品久久97| 亚洲一区二区自拍| 亚洲精品国精品久久99热一| 国产91对白在线播放| 欧美日韩在线视频首页| 亚洲天堂av在线免费观看|