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

首頁 > 編程 > C# > 正文

c#典型工廠化實現實例

2020-01-24 03:30:44
字體:
來源:轉載
供稿:網友

工廠接口定義

復制代碼 代碼如下:

/// <summary>
    /// 工廠接口定義
    /// </summary>
    /// <remarks>
    ///     TTarget : abstract product type
    ///     TSource:  concrete product type
    /// </remarks>
    public interface IFactory
    {
        #region config and register type mapping

        /// <summary>
        /// 如果需要同時加載配置文件中定義的映射關系,可以按照SRP的原則定義獨立的配置類型。
        /// 由該配置類型調用這兩個接口為Factory加載配置信息
        /// </summary>

        IFactory RegisterType<TTarget, TSource>();  // fluent interface
        IFactory RegisterType<TTarget, TSource>(string name);   // fluent interface

        #endregion

        #region factory method

        TTarget Create<TTarget>();
        TTarget Create<TTarget>(string name);

        #endregion
    }

注冊類

復制代碼 代碼如下:

public sealed class TypeRegistry
    {
        readonly string DefaultNmae = Guid.NewGuid().ToString();
        IDictionary<Type, IDictionary<string, Type>> registry = new Dictionary<Type, IDictionary<string, Type>>();
        public void RegisterType(Type targetType,Type sourceType)
        {
            RegisterType(targetType, sourceType, DefaultNmae);
        }
        public void RegisterType(Type targetType, Type sourceType,string name)
        {
            if (targetType == null) throw new ArgumentNullException("targetType");
            if (sourceType == null) throw new ArgumentNullException("sourceType");
            if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name");
            IDictionary<string, Type> subDictionary;

            if (!registry.TryGetValue(targetType, out subDictionary))
            {
                subDictionary = new Dictionary<string, Type>();
                subDictionary.Add(name, sourceType);
                registry.Add(targetType, subDictionary);
            }
            else
            {
                if (subDictionary.ContainsKey(name))
                    throw new DuplicateKeyException(name);
                subDictionary.Add(name, sourceType);
            }
        }
        public Type this[Type targetType, string name]
        {
            get
            {
                if (targetType == null) throw new ArgumentNullException("targetType");
                if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name");
                if (registry.Count() == 0)
                    return null;

                return (registry
                    .Where(x => x.Key == targetType)).FirstOrDefault().Value
                    .Where(x => string.Equals(name, x.Key))
                        .FirstOrDefault().Value;
            }
        }

        public Type this[Type targetType]
        {
            get { return this[targetType, DefaultNmae]; }
        }

    }

工廠類

復制代碼 代碼如下:

public class Factory : IFactory
    {
        protected TypeRegistry registry = new TypeRegistry();

        #region IFactory Members

        public IFactory RegisterType<TTarget, TSource>()
        {
            registry.RegisterType(typeof(TTarget), typeof(TSource));
            return this;
        }

        public IFactory RegisterType<TTarget, TSource>(string name)
        {
            registry.RegisterType(typeof(TTarget), typeof(TSource), name);
            return this;
        }

        public TTarget Create<TTarget>()
        {
            return (TTarget)Activator.CreateInstance(registry[typeof(TTarget)]);
        }

        public TTarget Create<TTarget>(string name)
        {
            return (TTarget)Activator.CreateInstance(registry[typeof(TTarget), name]);
        }

        #endregion
    }

調用

復制代碼 代碼如下:

[TestMethod]
        public void CreateInstance()
        {
            var factory = new Factory()
                .RegisterType<IFruit, Apple>()
                .RegisterType<IFruit, Orange>("o")
                .RegisterType<IVehicle, Bicycle>()
                .RegisterType<IVehicle, Bicycle>("a")
                .RegisterType<IVehicle, Train>("b")
                .RegisterType<IVehicle, Car>("c");

            Assert.IsInstanceOfType(factory.Create<IFruit>(), typeof(Apple));
            Assert.IsInstanceOfType(factory.Create<IFruit>("o"), typeof (Orange));

            Assert.IsInstanceOfType(factory.Create<IVehicle>(), typeof(Bicycle));
            Assert.IsInstanceOfType(factory.Create<IVehicle>("a"), typeof(Bicycle));
            Assert.IsInstanceOfType(factory.Create<IVehicle>("b"), typeof(Train));
            Assert.IsInstanceOfType(factory.Create<IVehicle>("c"), typeof(Car));
        }

其實精髓還是在于注冊類的一個類似assembly的功能,通過字典的方式,封裝,然后通過泛型來比對實現,或者通過配置文件傳參數過來實現出一個新的實例化

里面注意連貫接口,泛型,等操作

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久高潮国产精品视| 亚洲v日韩v综合v精品v| 美女久久久久久久久久久| 亚洲成人精品久久| 97久久精品国产| 亚洲综合自拍一区| 欧美激情欧美激情| 亚洲欧美自拍一区| 亚洲欧洲日韩国产| 欧美国产日本在线| 国产综合福利在线| 亚洲精品国产综合区久久久久久久| 国产精品美乳一区二区免费| 亚洲色图在线观看| www.欧美三级电影.com| 成人a免费视频| 亚洲人成网站在线播| www国产91| 亚洲影院色无极综合| 国产在线视频2019最新视频| 97在线视频免费播放| 福利一区福利二区微拍刺激| 在线视频一区二区| 亚洲精品一区久久久久久| 日本精品一区二区三区在线| 中文日韩在线观看| 色妞一区二区三区| 亚洲人免费视频| 一区二区欧美日韩视频| 亚洲国产日韩欧美在线动漫| 色婷婷av一区二区三区在线观看| 欧美日韩激情美女| 狠狠爱在线视频一区| www.久久久久| 久久亚洲一区二区三区四区五区高| 伊人精品在线观看| 日韩精品在线免费| 欧美日韩精品在线| 影音先锋日韩有码| 国产精品69久久久久| 久久精品国产一区二区电影| 亚洲最大av在线| 菠萝蜜影院一区二区免费| 亚洲va欧美va在线观看| 97精品国产97久久久久久春色| 狠狠躁夜夜躁人人爽天天天天97| 久久久久久国产精品美女| 欧美激情第99页| 国产亚洲激情视频在线| 日产精品久久久一区二区福利| 欧美激情成人在线视频| 国产一区二中文字幕在线看| 国产区亚洲区欧美区| 亚洲伊人一本大道中文字幕| 九九久久国产精品| 91影视免费在线观看| 精品高清美女精品国产区| 国产精品美女呻吟| 欧美亚洲第一页| 国产日韩欧美在线| 91免费人成网站在线观看18| 亚洲国产精品久久久久秋霞不卡| xxav国产精品美女主播| 97精品一区二区三区| 久久久亚洲国产天美传媒修理工| 欧美午夜www高清视频| 日韩亚洲欧美中文在线| 91av视频在线观看| 欧美疯狂性受xxxxx另类| 久久激情视频免费观看| 欧美成人小视频| 国产精品色婷婷视频| 亚洲jizzjizz日本少妇| 久久精品欧美视频| 成人午夜在线影院| 俺也去精品视频在线观看| 高清一区二区三区四区五区| 国产精品久久久久久久久久尿| 日韩美女av在线| 国产在线播放不卡| 国产激情999| 欧美精品免费在线观看| 国产一区二区激情| 精品国产一区久久久| 亚洲午夜久久久久久久| 欧美性xxxx在线播放| 韩国欧美亚洲国产| 欧日韩不卡在线视频| 538国产精品一区二区免费视频| 精品欧美激情精品一区| 色综合天天狠天天透天天伊人| 高清日韩电视剧大全免费播放在线观看| 亚洲天堂av在线播放| 高清一区二区三区四区五区| 亚洲理论电影网| 亚洲欧美国内爽妇网| www.日韩.com| 98午夜经典影视| 国内揄拍国内精品| 欧美日韩另类在线| 中文字幕无线精品亚洲乱码一区| 欧美一级淫片丝袜脚交| 国外成人免费在线播放| 亚洲精品资源在线| 亚洲欧美一区二区三区情侣bbw| 日韩亚洲一区二区| 国产亚洲视频在线观看| 国产不卡视频在线| 国产精品久久久久久久久粉嫩av| 久久久精品999| 欧美成人一二三| www.欧美免费| 国产精品白嫩初高中害羞小美女| 亚洲图片制服诱惑| 在线看日韩av| 亚洲影院色无极综合| 欧美三级欧美成人高清www| 欧美大肥婆大肥bbbbb| 欧美大秀在线观看| 国产精品免费小视频| 97碰在线观看| 国产视频综合在线| 精品中文字幕久久久久久| 国产精品一区二区av影院萌芽| 深夜福利亚洲导航| 国产亚洲欧美日韩美女| 欧美性极品少妇精品网站| 欧美精品一二区| 国产精品亚洲片夜色在线| 国产精品成人在线| 欧美高清视频在线观看| 国产+成+人+亚洲欧洲| 国产精品日韩av| 91av视频在线| 国产精品美女无圣光视频| 一区二区国产精品视频| 久久久爽爽爽美女图片| 国产精品久久久久9999| 国产亚洲福利一区| 久久不射电影网| 日韩免费黄色av| 成人高清视频观看www| 欧美成人性生活| 欧美限制级电影在线观看| 久久久久久网站| 自拍偷拍亚洲精品| 国产在线播放不卡| 亚洲黄色www网站| 北条麻妃一区二区三区中文字幕| 欧美孕妇性xx| 91亚洲精品一区二区| 国产精品入口夜色视频大尺度| 人人澡人人澡人人看欧美| 日韩小视频网址| 国产91成人video| 18一19gay欧美视频网站| 亚洲精品91美女久久久久久久| 97精品一区二区三区| 久久国产精品视频| 欧美大片网站在线观看| 亚洲自拍偷拍网址| 国产亚洲成av人片在线观看桃| 国产在线高清精品| 欧美裸体视频网站|