Factory Method Pattern工厂方法模式,定义了一个用于创建对象的接口,但让子类决定实例化哪个类。此模式让类将实例化延迟到子类。
Design Pattern:Factory Method 🔗
基本介绍 🔗
构成 🔗
- Creator:抽象工厂,定义工厂所有的操作接口,包括创建Product类型方法,所有ConcreteCreator都必须继承Creator类。
- ConcreteCreator:实际工厂,实现Creator类定义的抽象方法,用来创建实际产品。
- Product:抽象产品,定义产品所有的操作接口,所有ConcreteProduct都必须继承Product类。
- ConcreteProduct:实际产品,实现Product类定义的抽象方法。
优点 🔗
- 用户只需要知道所要产品的具体工厂,无须关系具体的创建过程。
- 增加新产品时,只需定义自己的实际产品和实际工厂,无需对旧工厂进行修改,更符合开闭原则。
缺点 🔗
- 代码变得复杂,因为您创建了越来越多的类来实现该模式。
实例 🔗
C#中工厂方法模式的实例,下面我们又来到了富士康的手机装配车间。
- Creator
/// <summary>
/// 抽象工厂类
/// </summary>
public abstract class Factory
{
// 工厂方法
public abstract Phone CreatePhone();
}
- ConcreteCreator
/// <summary>
/// 生产华为手机工厂
/// </summary>
public class HuaweiPhoneFactory : Factory
{
/// <summary>
/// 生产华为手机
/// </summary>
/// <returns></returns>
public override Phone CreatePhone()
{
return new HuaweiPhone();
}
}
/// <summary>
/// 生产苹果手机工厂
/// </summary>
public class PingGuoFactory : Factory
{
/// <summary>
/// 生产苹果手机
/// </summary>
/// <returns></returns>
public override Phone CreatePhone()
{
return new PingGuoPhone();
}
}
- Product
/// <summary>
/// 手机抽象类
/// </summary>
public abstract class Phone
{
// 打电话
public abstract void Call();
}
- ConcreteProduct
/// <summary>
/// 华为手机
/// </summary>
public class HuaweiPhone : Phone
{
public override void Call()
{
Console.WriteLine("我在用华为手机给你打电话!");
}
}
/// <summary>
/// 苹果手机
/// </summary>
public class PingGuoPhone : Phone
{
public override void Call()
{
Console.WriteLine("我在用苹果手机给你打电话!");
}
}
实际运行:
// 初始化创建手机的两个工厂
Factory huaweiPhoneFactory = new HuaweiPhoneFactory();
Factory pingGuoPhoneFactory = new PingGuoPhoneFactory();
// 生产一部华为手机
Phone huawei = huaweiPhoneFactory.CreatePhone();
huawei.Call();
//生产一部苹果手机
Phone pingguo = pingGuoPhoneFactory.CreatePhone();
pingguo.Call();
结论 🔗
搬砖愉快!