zoukankan      html  css  js  c++  java
  • Abstract Factory与Unity结合

         采用短信示例场景,SGIP,CMPP是联通与移动协议,对应它们有自己的配置文件。ISmsProvider为所有协议接口,IConfig
    配置文件接口。通过在配置文件中配置工厂,在Unity中实现Client类构造函数自动注入。

        /// <summary>

        /// Interface for Factory

        /// </summary>

        /// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>

        public interface IFactory

        {

            ISmsProvider CreateSms();

            IConfig CreateConfig();

        }

     

        public interface ISmsProvider

        {

            void ReadConfig(IConfig config);

        }

     

        public interface IConfig

        {

            string ConfigInfo();

        }

     

        public class SGIPFactory : IFactory

        { 

            public ISmsProvider CreateSms()

            {

                return new SGIP();

            }

            public IConfig CreateConfig()

            {

                return new SGIPConfig();

            }

        }

     

        public class SGIP : ISmsProvider

        {

           public void ReadConfig(IConfig config)

           {

               Console.WriteLine("SGIP readconfig with " + config.ConfigInfo());

           }

        }

     

        public class SGIPConfig : IConfig

        {

            public string ConfigInfo()

            {

                return "SGIPCONFIG";

            }

        }

     

        public class CMPPFactory : IFactory

        {

            public ISmsProvider CreateSms()

            {

                return new CMPP();

            }

            public IConfig CreateConfig()

            {

                return new SGIPConfig();

            }

        }

     

        public class CMPP : ISmsProvider

        {

            public void ReadConfig(IConfig config)

            {

                Console.WriteLine("CMPP readconfig with "+config.ConfigInfo());

            }

        }

     

        public class CMPPConfig : IConfig

        {

            public string ConfigInfo()

            {

                return "CMPPConfig";

            }

        }

     

        /// <summary>

        /// SmsPlatform

        /// </summary>

        /// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>

        public class SmsPlatform

        {

            private ISmsProvider smsProvider;

            private IConfig config;

            private IFactory factory1,factory2;

     

            // Constructors auto inject

            public SmsPlatform(IFactory factory)

            {

                smsProvider = factory.CreateSms();

                config = factory.CreateConfig();

            }

     

            // Methods

            public void Run()

            {

                smsProvider.ReadConfig(config);

            }

        }

    配置文件:

    xml

    调用代码:

      private static void AnotherWays2()

            {

                IUnityContainer container = new UnityContainer();     

                UnityConfigurationSection section =

                    (UnityConfigurationSection)ConfigurationManager.GetSection("unity");

                section.Containers.Default.Configure(container);    

                SmsPlatform smf = container.Resolve<SmsPlatform>();

                smf.Run();

                Console.ReadLine();

            }


    http://wintersun.cnblogs.com/


     

  • 相关阅读:
    你的面向对象技术在哪个级别?
    图解面向对象中的聚合与耦合概念
    系统架构39问
    谈谈对一些软件架构设计箴言的理解
    mysql 常用见的错误处理
    mysql 局域网连接
    mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'
    Ubuntu系统开放指定端口
    spring cloud 项目
    spring cloud 知识总结
  • 原文地址:https://www.cnblogs.com/wintersun/p/1329861.html
Copyright © 2011-2022 走看看