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);
}
}
}