设计模式之简单工厂模式

一 、定义

简单工厂模式是一种创建型设计模式,它提供一个统一的接口来创建对象,而不需要客户端直接实例化对象。简单工厂模式通过封装创建对象的逻辑,简化了对象的创建过程,同时也提高了代码的可维护性和扩展性。缺点是:每当增加具体得产品类得时候,需要更改工厂类得内容,不合符开闭原则。

简单工厂模式的使用场景包括以下几种:

  1. 当需要根据不同的条件创建不同类型的对象时,可以使用简单工厂模式。例如,根据用户的权限级别创建不同类型的用户对象。

  2. 当需要统一管理创建对象的逻辑时,可以使用简单工厂模式。例如,通过一个工厂类来创建不同类型的数据库连接对象。

  3. 当对象的创建逻辑比较复杂,包含大量的条件判断和多个步骤时,可以使用简单工厂模式。它可以将复杂的创建过程封装在一个工厂类中,使客户端只需要关注获取对象即可。

二、代码示例

下面是一个简单工厂模式的示例代码:

java 复制代码
// 定义一个产品接口
public interface Product {
  void operation();
}

// 具体产品类A
public class ConcreteProductA implements Product {
  @Override
  public void operation() {
    System.out.println("ConcreteProductA operation");
  }
}

// 具体产品类B
public class ConcreteProductB implements Product {
  @Override
  public void operation() {
    System.out.println("ConcreteProductB operation");
  }
}

// 简单工厂类
public class SimpleFactory {
  public static Product createProduct(String type) {
    if (type.equals("A")) {
      return new ConcreteProductA();
    } else if (type.equals("B")) {
      return new ConcreteProductB();
    } else {
      throw new IllegalArgumentException("Invalid type: " + type);
    }
  }
}

// 客户端使用简单工厂类创建产品
public class Client {
  public static void main(String[] args) {
    Product productA = SimpleFactory.createProduct("A");
    productA.operation();

    Product productB = SimpleFactory.createProduct("B");
    productB.operation();
  }
}

上面示例中,产品接口(Product)定义了产品的操作方法,具体产品类A和B实现了该接口。简单工厂类(SimpleFactory)根据客户端传入的参数来创建不同类型的产品对象。客户端(Client)使用简单工厂类来创建产品并调用其操作方法。

通过使用简单工厂模式,客户端不需要知道具体的产品类,只需通过简单工厂类来创建产品对象。当需要新增产品时,只需要在简单工厂类中添加对应的创建逻辑即可,无需修改客户端的代码。这提高了代码的可维护性和扩展性。

注意 :简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

如有错误,欢迎指出,期待和大家共同进步-------------------------------------------------------------------------------------

相关推荐
YYYing.1 小时前
【设计模式系列 (四) 】建造者模式
c++·后端·设计模式·建造者模式·c/c++
Zane199419 小时前
同一段单例代码,为什么在高并发下偶尔会创建出两个实例?聊聊哪种单例实现才是真的安全
设计模式
Carl_奕然19 小时前
【智能体】Loop 的四种设计模式之:Agent Loop(2026 最新版)
人工智能·设计模式·语言模型
小酒星小杜20 小时前
画 AI 漫画,别只会写“日漫风”:10 种画风、适用故事和可复制提示词
人工智能·设计模式·程序员
sarasuki1 天前
为什么 Agent 工具需要一个「协议」而不是「框架」:MCP 成为标准的底层逻辑
设计模式·agent·mcp
vivo互联网技术1 天前
知识不是文件,也不是向量 | KDC 系列 02
人工智能·设计模式·架构
Zane19947 天前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫8 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19948 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19949 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式