设计模式系列之-简单工厂
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DPC.Domain; namespace DPC.CreateModel.SimpleFactory { class Program { static void Main(string[] args) { MobilePhone phone = MobilePhoneFactory.GetMobilePhone("苹果"); phone.Show(); Console.WriteLine(); MobilePhone xiaomo = MobilePhoneFactory.GetMobilePhone("小米"); xiaomo.Show(); Console.ReadKey(); } } //简单工厂(又名静态工厂) //优点:该模式代码简单易于理解,学习成本较小。 //缺点:业务变动时需要修改工厂中的已有代码,违背了对修改关闭、对扩展开放的设计原则,不利于程序的扩展和维护。 public class MobilePhoneFactory { public static MobilePhone GetMobilePhone(string name) { switch(name) { case "苹果": return new IPhone("iphone6", 5000); case "小米": return new XiaoMi("小米青春版", 2000); default: throw new NotImplementedException("不存在的品牌"); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DPC.Domain { public abstract class MobilePhone { public MobilePhone(string model,decimal price) { this.Model = model; this.Price = price; } /// <summary> /// 名字 /// </summary> public abstract string Name { get; } /// <summary> /// 型号 /// </summary> public string Model { get; private set; } /// <summary> /// 价格 /// </summary> public decimal Price { get; private set; } /// <summary> /// 综合情况展示 /// </summary> public virtual void Show() { Console.WriteLine("品牌:{0},型号:{1},价格:{2}", this.Name, this.Model, this.Price); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DPC.Domain { public class IPhone : MobilePhone { private static readonly string name = "苹果"; public IPhone(string model, decimal price) : base(model, price) { } public override string Name { get { return name; } } public override void Show() { Console.WriteLine("土豪手机闪亮登场......"); Console.WriteLine("品牌:{0},型号:{1},价格:{2}",this.Name,this.Model,this.Price); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DPC.Domain { public class XiaoMi : MobilePhone { public XiaoMi(string model, decimal price) : base(model, price) { } public override string Name { get { return "小米"; } } public override void Show() { Console.WriteLine("made in china手机闪亮登场......"); Console.WriteLine("品牌:{0},型号:{1},价格:{2}", this.Name, this.Model, this.Price); } } }