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


    目录

    一、简单介绍

    二、未使用工厂模式之前

    三、简单工厂模式

    初始

    优化

    总结


    一、简单介绍

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

    核心本质:

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

    三种模式:

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

    二、未使用工厂模式之前

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

    1. public interface Car {
    2. void name();
    3. }
    4. public class WuLing implements Car{
    5. @Override
    6. public void name() {
    7. System.out.println("五菱");
    8. }
    9. }
    10. public class Tesla implements Car{
    11. @Override
    12. public void name() {
    13. System.out.println("特斯拉");
    14. }
    15. }

    (2)创建一个Customer类,

    1. public class Customer {
    2. public static void main(String[] args) {
    3. Car car1 = new WuLing();
    4. Car car2 = new Tesla();
    5. car1.name();
    6. car2.name();
    7. }
    8. }

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

    三、简单工厂模式

    初始

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

    1. public class CarFactory {
    2. public static Car getCar(String car) {
    3. if (car.equals("五菱")) {
    4. return new WuLing();
    5. } else if (car.equals("特斯拉")) {
    6. return new Tesla();
    7. }else {
    8. return null;
    9. }
    10. }
    11. }

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

    1. public class Customer {
    2. public static void main(String[] args) {
    3. Car car1 =CarFactory.getCar("五菱");
    4. Car car2 =CarFactory.getCar("特斯拉");
    5. car1.name();
    6. car2.name();
    7. }
    8. }

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

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

    优化

    优化工厂CarFactory类,

    1. public class CarFactory {
    2. public static Car getWuLing(){
    3. return new WuLing();
    4. }
    5. public static Car getTesla(){
    6. return new Tesla();
    7. }
    8. }

    因此,修改Customer类,

    1. public class Customer {
    2. public static void main(String[] args) {
    3. Car car1 =CarFactory.getWuLing();
    4. Car car2 =CarFactory.getTesla();
    5. car1.name();
    6. car2.name();
    7. }
    8. }

    画个流程图分析一下,

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

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

    请移步我的另一篇博客

    总结

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

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

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

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

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

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

  • 相关阅读:
    【勇敢饭饭,不怕刷题之链表】有序链表的合并
    安装指定版本nodejs
    【ccf-csp题解】第7次csp认证-第三题-路径解析超详细题解-字符串模拟
    mongodb之shard分片
    常见配置文件格式INI/XML/YAML/JSON/Properties/TOML/HCL/YAML Front Matter/.env介绍及实例
    R语言生存分析数据分析可视化案例
    [ C++ ] 多态原理 多态(2)
    HTTP和HTTPS的区别是什么
    编译安装nginx时候的报错
    速码!!!BGP最全学习笔记:BGP选路原则实验配置
  • 原文地址:https://blog.csdn.net/qq_45956730/article/details/137956085