简单工厂模式

# 分类

创建型模式

# 定义

简单工厂模式(Simple Factory Pattern) 又称静态工厂方法模式,简单工厂模式中专门定义一个类,来负责创建其他类的实例,被创建的实例通常具有共同的父类或接口

# 意图

简单工厂模式的意图是根据提供给他们的数据,通常为一个字符串或枚举,返回几个可能类中的一个类的实例。

# 应用场景

  • 对于产品种类相对较少的情况,考虑使用简单工厂模式。
  • 使用简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

# 角色与结构图

  • IProduct:抽象产品角色 抽象产品角色是所创建所有对象的父类,负责描述所有实例所共有的公共接口。
  • ConcreteProduct:具体产品角色 具体产品角色是创建目标,所有创建的对象都充当 IProduct 这个角色的某个具体实例。
  • Factory:工厂角色 工厂角色负责实现创建所有实例的内部逻辑。

下图解释了简单工厂模式中各角色的作用

简单工厂模式结构图

# 示例代码

//工厂类
public enum Category
{
    A,
    B
}
public class ProductFactory
{
    public static IProduct Create(Category category)
    {
        switch (category)
        {
            case Category.A:
                return new ConcreteProductA();
            case Category.B:
                return new ConcreteProductB();
            default:
                throw new NotSupportedException();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//产品系列
interface IProduct{
    void Use();
}
class ConcreteProductA : Iproduct{
    public void Use(){
        Console.WriteLine("A产品");
    }
}
class ConcreteProductB : Iproduct{
    public void Use(){
        Console.WriteLine("B产品");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//客户端代码
static void Main(string[] args){
    IProduct product = ProductFactory.Create(Category.B);
    product.Use();
}
1
2
3
4
5

# 优点

  • 工厂类含有必要的判断逻辑,可决定创建产品实例的实际时刻。工厂和产品的职责区分明确,客户端仅仅“消费”产品。
  • 客户端只需要知道具体产品类所对应的参数即可。

# 缺点

  • 工厂类集中了所有产品的创建逻辑,职责过重,一旦发生异常,整个系统将受影响。
  • 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
  • 系统扩展困难,一旦增加新产品就不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构
  • 简单工厂只能创建一种类型实例。例如:只能创建工程师类型实例。

# 小结

  • 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化,这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。

# 一句话概括

静态方法封装创建其他类实例的细节逻辑,并根据传入的参数创建对应实例。

上次更新: 2025/03/22, 13:47:44
最近更新
01
vue3尚硅谷课件
04-26
02
Git问题集合
01-29
03
安装 Nginx 服务器
01-25
更多文章>
×
×