简单工厂
什么是简单工厂模式
定义一个工厂类。工厂类可以根据输入参数返回不同对象的实例。创建的对象都有相同的父类或接口
由于工厂类使用静态方法来创建实例,所以简单的工厂也可以称为静态工厂。虽然不属于 23 种设计模式方法方法,但作为一种对象创建设计模式,它可以作为其他工厂模式的基础。
为什么要使用工厂模式
工厂模式将类的实例化过程抽象化,将对象的使用和创建分离,对用户隐藏类实例创建的细节。类的具体创建过程的变化不会影响类的使用,在一定程度上提高了代码的复用性。
如何实现简单的工厂组合
简单工厂由三部分组成:
工厂类:简单工厂的核心,负责创建所有产品的抽象产品:封装各种产品的公共方法具体产品:继承自抽象产品类,实现抽象产品UML类图中声明的方法
实现一个简单的工厂抽象产品
public abstract class Product
{
protected string Name;
protected Product(string name)
{
Name = name;
}
public abstract string IntroductProduct();
}
复制代码
具体产品
internal class ProductA : Product
{
public ProductA(string name) : base(name)
{
}
public override string IntroductProduct()
{
return $"这是产品{Name}";
}
}
internal class ProductB : Product
{
public ProductB(string name) : base(name)
{
}
public override string IntroductProduct()
{
return $"这是产品{Name}";
}
}
复制代码
创建实例的工厂
public class ProductFactory
{
public static Product CreateProduct(string productName)
{
return productName switch
{
nameof(ProductA) => new ProductA(productName),
nameof(ProductB) => new ProductB(productName),
_ => throw new ArgumentException(nameof(productName))
};
}
}
复制代码
客户端程序调用
public class Client
{
public void ClientExecuteLogic()
{
var p1 = ProductFactory.CreateProduct(nameof(ProductA));
Console.WriteLine(p1.IntroductProduct());
var p2 = ProductFactory.CreateProduct(nameof(ProductB));
Console.WriteLine(p2.IntroductProduct());
}
}
复制代码
输出结果
总结优缺点使用场景
从优缺点不难看出,简单的工厂适合创建较少的对象,而创建过多的对象会增加工厂类的逻辑复杂度