工厂方法模式

 /// <summary>
    /// 产品通过接口实现具体产品
    /// 具体产品的实例化不依赖于硬编码
    /// 而是通过抽象工厂来延迟实现具体工厂来实现具体产品的实现
    /// </summary>
    public class AbstractFactoryTest
    {
        public static void Main(string[] args)
        {
            IProduct product;
            IAbstractFactory abstractFactory;
            abstractFactory = ReadXMlConfig.GetAbstractFactory();
            product = abstractFactory.NewProduct();
            product.Show();
        }
    }
    public interface IProduct
    {
        void Show();
    }
    public class ConcreteProduct1 : IProduct
    {
        public void Show()
        {
            Console.WriteLine("具体产品1展示");
        }
    }
    public class ConcreteProduct2 : IProduct
    {
        public void Show()
        {
            Console.WriteLine("具体产品2展示");
        }
    }
    public interface IAbstractFactory
    {
        IProduct NewProduct();
    }
    public class ConcreteFactory1 : IAbstractFactory
    {
        public IProduct NewProduct()
        {
            Console.WriteLine("具体工厂1生成-->具体产品1");

            return new ConcreteProduct1();
        }
    }
    public class ConcreteFactory2 : IAbstractFactory
    {
        public IProduct NewProduct()
        {
            Console.WriteLine("具体工厂2生成-->具体产品1");

            return new ConcreteProduct2();
        }
    }
    public class ReadXMlConfig
    {
        public static IAbstractFactory GetAbstractFactory()
        {
            string name = "PE.SD.DesignMode.ConcreteFactory1";
            IAbstractFactory factory = Assembly.Load("PE.SD.DesignMode").CreateInstance(name) as IAbstractFactory;
            return factory;
        }
    }

 

posted on 2019-08-03 12:39  迎着风追赶  阅读(98)  评论(0)    收藏  举报

导航