C#--設計模式--工程模式

 /// <summary>
    /// 工廠模式
    /// 工廠模式是將對象的創建與上游使用方,進行分離。通過factory對象來創建。
    /// 通過factory對象來創建,通過配置信息,進行創建對象,就是工廠根據採購清單生產商品一樣
    /// 1.通過配置文件來配置對象信息。
    /// 2.通過配置信息+反射來進行對象的創建。
    /// 3.上游對象不需要關心對象的創建過程。
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            ///1.直接創建對象方式
            ///對象創建在上游[主程序]已經確定,不能進行分離。
            InitMethods1();
            ///2.通過工廠對象創建對象
            InitFactory();
            Console.Read();
        }

        private static void InitFactory()
        {
            IAnimal animal = ObjectFactory.CreateInit<IAnimal>();
            animal.Sleep();
        }

        private static void InitMethods1()
        {
            IAnimal cat = new Cat();
            IAnimal dog = new Dog();
            cat.Sleep();
            dog.Sleep();
        }
    }

創建動物(IAnimal)接口:


    public interface IAnimal
    {
        void Sleep();
    }

創建貓類(Cat),繼承IAnimal


    public class Cat : IAnimal
    {
        public void Sleep()
        {
            Console.WriteLine("當前對象{0}",this.GetType());
        }
    }

創建dog類,繼承Ianimal

 public class Dog : IAnimal
    {
        public void Sleep()
        {
            Console.WriteLine("當前對象{0}",this.GetType());
        }
    }

ObjectFactry對象,用於根據XML配置信息創建對象


    class ObjectFactory
    {
        /// <summary>
        /// 通過工廠對象創建對象
        /// </summary>
        /// <returns>當前實例對象</returns>
        static string config =  ConfigurationManager.ConnectionStrings["factoryConfig"].ConnectionString;
        public static T CreateInit<T>()
        {
            try
            {
                string dllName = config.Split(',')[0];
                string className = config.Split(',')[1];
                Assembly assembly = Assembly.Load(dllName);
                Type type = assembly.GetType(className);
                return (T) Activator.CreateInstance(type);
            }
            catch (Exception)
            {
                throw new Exception("Class Exception");
            }
        }
    }

XML:

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
  <connectionStrings>
    <add name="factoryConfig" connectionString="FactoryLibrary,Factory.Cat"/>
    <add name="factoryConfig1" connectionString="FactoryLibrary,Factory.Dog"/>
    <!---->
  </connectionStrings>
</configuration>

運行結果如下圖:

如果將XML配置文件修改爲<add name="factoryConfig" connectionString="FactoryLibrary,Factory.Dog"/>,運行結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章