一、什么是工厂模式?
1.工厂模式就是定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2.初始化封装。就是说在需求一个类的实例时,假如需要一个相同属性的实例,每次初始化的操作是一样的,用工厂模式就可以对初始化进行封装,简化操作。
工厂模式和上一篇的简单工厂模式(https://blog.youkuaiyun.com/Jie_Studio/article/details/88963624)差不多,就相当于对简单工厂的升级,也用一个小案例展示一下:
1.首先同样是定义一个食品的抽象类:
/// <summary>
/// 食品的抽象类
/// </summary>
public abstract class Food
{
// 输出在网上买了什么东西
public abstract void Print();
}
2.定义具体要实现的食品类:
/// <summary>
/// 牛奶类
/// </summary>
public class Milk : Food
{
public override void Print()
{
Console.WriteLine("一瓶牛奶!");
}
}
/// <summary>
/// 辣条类
/// </summary>
public class Spicystrips : Food
{
public override void Print()
{
Console.WriteLine("一包辣条");
}
}
3.定义一个零售工厂类:
/// <summary>
/// 零售工厂类(工厂模式)
/// </summary>
public abstract class FoodSimpleFactory
{
public abstract Food CreateFacory();
}
4.定义的类别工厂:
/// <summary>
/// 饮品类工厂
/// </summary>
public class DrinkFactory : FoodSimpleFactory
{
public override Food CreateFacory()
{
return new Milk();
}
}
/// <summary>
/// 零食类工厂
/// </summary>
public class SnacksFactoyr : FoodSimpleFactory
{
public override Food CreateFacory()
{
return new Spicystrips();
}
}
5.最后通过客户端去调用:
class Program
{
static void Main(string[] args)
{
//初始化工厂--饮品类
FoodSimpleFactory foodfactory = new DrinkFactory();
//牛奶
Food food = foodfactory.CreateFacory();
food.Print();
Console.Read();
}
}
6.如果想改为零食类,只需要更改:
//初始化工厂--零食类
FoodSimpleFactory foodfactory = new SnacksFactoyr();
工厂模式的使用场景:
1.客户端不需要知道它所创建的对象的类。例子中我们不知道每个图片加载器具体叫什么名,只知道创建它的工厂名就完成了创建过程。
2.客户端可以通过子类来指定创建对应的对象。