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

目录

一、简单介绍

二、未使用工厂模式之前

三、简单工厂模式

初始

优化

总结


一、简单介绍

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

核心本质:

  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):具体的对象类型,由工厂类根据客户端请求创建的对象。产品类可以是接口、抽象类或具体类的形式。

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

相关推荐
@东辰3 分钟前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
Hello-Brand3 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码9 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.11 分钟前
Pod控制器
java·开发语言
2的n次方_13 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55114 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.14 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七19 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
敲敲敲-敲代码20 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
weisian15125 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全