设计模式系列之-工厂方法
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 }