【工厂模式】简单工厂模式-简单例子

目录

一、简单介绍

二、未使用工厂模式之前

三、简单工厂模式

初始

优化

总结


一、简单介绍

工厂模式是一种软件设计模式,用于创建对象的方法。在工厂模式中,创建对象的逻辑被封装在一个单独的类中,该类负责根据特定条件或参数创建合适的对象并返回给调用者,而调用者无需关心对象的创建细节。这有助于降低代码的耦合度,并提高代码的可维护性和扩展性。

核心本质:

  1. 实例化对象不使用new,用工厂方法代替
  2. 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

三种模式:

  1. 简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要球盖已有代码)
  2. 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
  3. 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂

二、未使用工厂模式之前

(1)创建一个Car接口,和两个实现类。

java 复制代码
public interface Car {
   void name();
}

public class WuLing implements Car{
  @Override
  public void name() {
    System.out.println("五菱");
  }
}

public class Tesla implements Car{
  @Override
  public void name() {
    System.out.println("特斯拉");
  }
}

(2)创建一个Customer类,

java 复制代码
public class Customer {
  public static void main(String[] args) {
    Car car1 = new WuLing();
    Car car2 = new Tesla();
    car1.name();
    car2.name();
  }
}

这是原来的样子,相当于car1和car2是自己创建的,但是工厂模式是实例化对象不使用new,所以我们需要修改Customer类。

三、简单工厂模式

初始

(1)创建一个工厂CarFactory类,此时创建car只需要传入一个字符串就可以了,

java 复制代码
public class CarFactory {
  public static Car getCar(String car) {
    if (car.equals("五菱")) {
      return new WuLing();
    } else if (car.equals("特斯拉")) {
      return new Tesla();
    }else {
      return null;
    }
  }
}

(2)修改Customer类,使用工厂创建car,

java 复制代码
public class Customer {
  public static void main(String[] args) {
    Car car1  =CarFactory.getCar("五菱");
    Car car2  =CarFactory.getCar("特斯拉");
    car1.name();
    car2.name();
  }
}

这样就相当于我们是直接去工厂拿车,不用去关注工厂里面的细节,工厂的好处就在这儿。

但是目前这个代码有个缺点就是假设我们要再增加一种新车,就需要修改CarFactory类里的getCar()代码,不满足开闭原则,不建议对原代码进行修改。

优化

优化工厂CarFactory类,

java 复制代码
public class CarFactory {
  public static Car getWuLing(){
    return new WuLing();
  }

  public static Car getTesla(){
    return new Tesla();
  }
}

因此,修改Customer类,

java 复制代码
public class Customer {
  public static void main(String[] args) {
    Car car1  =CarFactory.getWuLing();
    Car car2  =CarFactory.getTesla();
    car1.name();
    car2.name();
  }
}

画个流程图分析一下,

目前这个代码还是需要进行优化的,因为假设我们现在有一种新车,要在车工厂新增一种,一定会改车工厂的代码,如果不修改车工厂的代码的话是拿不到新增的新车的,这个方式就不太好。

那么我们需要把这个车工厂也提取成一个接口,

请移步我的另一篇博客

总结

简单工厂模式(Simple Factory Pattern)是工厂模式的一种最基本的形式,它提供一个单独的工厂类,用于根据传入的参数或条件创建并返回合适的对象。简单工厂模式不属于 GoF(Gang of Four)设计模式中的正式成员,但它是工厂模式的一个简化版本,常用于对象创建的场景中。

在简单工厂模式中,客户端通过调用工厂类的静态方法或实例方法,并传入相应的参数来获取所需的对象,而无需直接实例化具体的对象类。这样做可以使客户端免于直接与具体的产品类耦合,从而更加灵活地管理对象的创建和替换。

简单工厂模式通常包括以下角色:

  1. 工厂类(Factory Class):负责根据客户端的请求创建并返回相应的对象实例。工厂类通常包含一个或多个静态方法,根据传入的参数或条件决定创建哪种类型的对象。

  2. 产品类(Product Class):具体的对象类型,由工厂类根据客户端请求创建的对象。产品类可以是接口、抽象类或具体类的形式。

简单工厂模式的优点在于简单易懂,适用于对于对象创建逻辑相对简单的场景。然而,它也有一些局限性,例如随着产品类型增加,工厂类会变得臃肿,不易维护;同时,客户端需要知道具体产品的类型信息,可能会破坏封装性。

相关推荐
Scott9999HH17 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔17 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社18 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海18 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖19 小时前
JDK 26 新特性详解
java·开发语言
马优晨20 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区21 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大1 天前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai1 天前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说1 天前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json