简单工厂:它不是一个设计模式,却是非常常用的编程习惯。
产品基类
//工厂所生产的产品"披萨"
public abstract class Pizza
{
//缺省产品名
protected string name = "未知披萨";
//产品生产工序
public virtual void prepare()
{
Console.WriteLine("准备“{0}”的馅料", name);
}
public virtual void bake()
{
Console.WriteLine("350度分钟烤25分钟 ");
}
public virtual void cut()
{
Console.WriteLine("将比萨饼切成斜片");
}
public virtual void box()
{
Console.WriteLine("将披萨装入地方特色的盒子中");
}
//获取产品名称
public string getName()
{
return name;
}
}
具体产品
//起司披萨
public class CheesePizza : Pizza
{
public CheesePizza()
{
base.name = "起司披萨";
}
}
//意大利辣味香肠披萨
public class PepperoniPizza : Pizza
{
public PepperoniPizza()
{
base.name = "意大利辣味香肠披萨";
}
}
产品简单工厂
public class SimpleFactory
{
public Pizza createPizza(string pizzaName)
{
Pizza pizza = null;
if (pizzaName.Equals("起司披萨"))
{
pizza = new CheesePizza();
}
else if (pizzaName.Equals("意大利辣味香肠披萨"))
{
pizza = new PepperoniPizza();
}
return pizza;
}
}
产品商店
public class PizzaStore
{
SimpleFactory factory;
public PizzaStore(SimpleFactory factory)
{
this.factory = factory;
}
public Pizza orderPizza(string pizzaName)
{
Pizza pizza = factory.createPizza(pizzaName);
if (pizza == null)
{
return pizza;
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
测试实例
static void Main(string[] args)
{
PizzaStore pizzaStore = new PizzaStore(new SimpleFactory());
Pizza pizza;
while (true)
{
Console.WriteLine("请输入披萨名称或直接输入回车退出");
string pizzaName = Console.ReadLine();
if (string.IsNullOrEmpty(pizzaName))
{
break;
}
pizza = pizzaStore.orderPizza(pizzaName);
if (pizza == null)
Console.WriteLine("未找到指定披萨");
else
Console.WriteLine("获得披萨:<{0}>", pizza.getName());
}
}
测试结果: