设计模式之简单工厂模式

一 、定义

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

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

  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设计模式之一。

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

相关推荐
SamDeepThinking2 小时前
用设计模式重构核心业务代码的一次实战
java·后端·设计模式
青草地溪水旁2 小时前
设计模式(C++)详解——建造者模式(2)
c++·设计模式·建造者模式
o0向阳而生0o4 小时前
102、23种设计模式之装饰器模式(11/23)
设计模式·装饰器模式
宁静致远20214 小时前
【C++设计模式】第五篇:装饰器模式
c++·设计模式·装饰器模式
IT灰猫7 小时前
C++轻量级配置管理器升级版
开发语言·c++·设计模式·配置管理·ini解析
大飞pkz7 小时前
【设计模式】题目小练2
开发语言·设计模式·c#·题目小练
不一样的少年_12 小时前
Vue3 后台分页写腻了?我用 1 个 Hook 删掉 90% 重复代码(附源码)
前端·vue.js·设计模式
A阳俊yi12 小时前
设计模式——七大常见设计原则
设计模式
青草地溪水旁14 小时前
设计模式(C++)详解——建造者模式(1)
c++·设计模式·建造者模式
念何架构之路20 小时前
Go语言设计模式(七)组合模式
设计模式·组合模式