简单工厂设计模式:负责生产对象的一个类;
实现方式(应用场景):我们平常编程中,当使用“new”关键字创建一个对象时,此时该对象就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一问题,该原则就是--封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用来封装,这样的一种思路也就是我们简单工厂的实现方式
运行结果:
上菜:
private void btnSF_Click(object sender, EventArgs e)
{
//做西红柿炒蛋
Food food1 = Customer.Cook("西红柿炒蛋");
food1.Print();
//做土豆肉丝
Food food2 = Customer.Cook("土豆肉丝");
food2.Print();
}
}
/// <summary>
/// 自己做饭的情况
/// 没有简单工厂之前,客户想吃什么菜只能自己炒的
/// </summary>
public class Customer
{
/// <summary>
/// 烧菜方法
/// </summary>
/// <returns></returns>
public static Food Cook(string type)
{
Food food = null;
//客户A说:我想吃西红柿炒蛋怎么办;
//客户B说:那你就自己烧啊;
//客户A说:好啊,那就自己做把
if (type.Equals("西红柿炒蛋"))
{
food = new TomatoScrambledEggs();
}
if (type.Equals("土豆肉丝"))
{
food = new ShreddedPorkWithPotatoes();
}
return food;
}
}
/// <summary>
/// 菜抽象类
/// </summary>
public abstract class Food
{
//输出了些什么菜
public abstract void Print();
}
/// <summary>
/// 西红柿炒蛋这道菜
/// </summary>
public class TomatoScrambledEggs : Food
{
public override void Print()
{
MessageBox.Show("一份西红柿炒蛋");
}
}
/// <summary>
/// 土豆肉丝这道菜
/// </summary>
public class ShreddedPorkWithPotatoes : Food
{
public override void Print()
{
MessageBox.Show("一份土豆肉丝");
}
}
}