首页 > 代码库 > 设计模式系列之-工厂方法

设计模式系列之-工厂方法

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using DPC.Domain;namespace DPC.CreateModel.FactoryMethod{    class Program    {        static void Main(string[] args)        {            //创建生产小米手机的工厂            IMobilePhoneFactory xiaomiFactory = new XiaoMiFactory();            MobilePhone xiaomi = xiaomiFactory.CreateMobilePhone(); //调用工厂对象生产手机的方法            xiaomi.Show();            Console.WriteLine();            //创建生产苹果手机的工厂            IMobilePhoneFactory iphoneFactory = new IPhoneFactory();            MobilePhone iphone = iphoneFactory.CreateMobilePhone(); //调用工厂对象生产手机的方法            iphone.Show();            //Console.WriteLine();            //工厂方法与简单工厂结合使用            //MobliePhoneFactoryHelper.GetPhone("苹果").Show();            //MobliePhoneFactoryHelper.GetPhone("小米").Show();            Console.ReadKey();        }    }    #region 工厂方法    //工厂方法模式是对简单工厂模式的改造和升级,在工厂模式的基础上对简单工厂做了更高层次的抽象,抽象出工厂接口。    //工厂方法模式符合对修改关闭、对扩展开放的原则,具有更好的扩展性。    //但工厂方法模式引入了更高的代码复杂度,学习和调用成本更高,且创建每个类的实例都需要相关的工厂类配合,所以某些情况下需要增加很多相关类。    //同时简单工厂和工厂方法结合可降低调用方的复杂度。    /// <summary>    /// 手机工厂接口(只要实现了该接口的类就是具备生产某种手机能力的工厂,这里有可能是苹果手机或者小米手机工厂)    /// </summary>    public interface IMobilePhoneFactory    {        MobilePhone CreateMobilePhone();    }    public class IPhoneFactory : IMobilePhoneFactory    {        public MobilePhone CreateMobilePhone()        {            return new IPhone("iphone6 plus", 6500);        }    }    public class XiaoMiFactory : IMobilePhoneFactory    {        public MobilePhone CreateMobilePhone()        {            return new XiaoMi("小米2代", 2500);        }    }    #endregion    #region 工厂方法与简单工厂结合    public class MobliePhoneFactoryHelper    {        public static MobilePhone GetPhone(string name)        {            IMobilePhoneFactory factory = null;            switch (name)            {                case "苹果":                    factory = new IPhoneFactory();                    return factory.CreateMobilePhone();                case "小米":                    factory = new XiaoMiFactory();                    return factory.CreateMobilePhone();                default:                    throw new NotImplementedException("不存在的品牌");            }        }    }    #endregion}

 

设计模式系列之-工厂方法