Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java工厂模式实例(设计模式)「建议收藏」

java工厂模式实例(设计模式)「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-09 04:37:59
发布于 2022-09-09 04:37:59
82300
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

目录

java工厂模式

工厂模式其实又分为三种

1.简单工厂模式:

简单工厂模式(非静态)

简单工厂模式(静态):

2.工厂方法模式:

3.抽象工厂模式:


java工厂模式

开篇声明,此理解为作者自身理解,不一定正确,如有错误请大佬们指正。

工厂模式,在作者看来,从现实生活来说,就是一个工厂,里面有N个车间,

每个车间会生产不同的产品,而租户只需要告诉这个工厂的老板我需要一个

什么产品,老板会去找到对应的车间返回给租户使用。

画个图理解:

如果使用java语言来描述则是,对具有相同动作,不同动作执行过程的一

类方法抽象出一个接口类,然后不同的实现类对接口类中的接口进行不同的

实现,并且编写一个工厂类,根据传入获取不同的实现类实例返回给调用者,调用者使用得到的实例

执行具体的方法。画个图(简单的加减乘除做示例,没怎么画过UML图,如果有错误,请见谅):

TestServiceImpl为业务逻辑实现类,MathFactory为工厂类,MathOperation为算法抽象接口类,

xxxOpreation为算法具体实现类,Class为java原生类,主要是要使用反射机制,会用到

工厂模式其实又分为三种

1.简单工厂模式:

不提供工厂接口只有工厂,提供实例的接口与实现

简单工厂模式(非静态)

就是提供一个接口interface,然后不同的实现类实现interface,再提供一个

工厂类,在工厂类中通过if条件判断,new出具体的实现类给调用者使用。

算法抽象接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface MathOperation {
    double apply(int a, int b);
}

算法抽象接口实现 (顺序-加减乘除):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;

public class AddOperation implements MathOperation {
    @Override
    public double apply(int a, int b) {
        return (double) a + b;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;

public class SubOperation implements MathOperation {
    @Override
    public double apply(int a, int b) {
        return (double) a - b;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;

public class MultiplyOperation implements MathOperation {
    @Override
    public double apply(int a, int b) {
        return (double) a * b;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;

public class DivideOperation implements MathOperation {
    @Override
    public double apply(int a, int b) {
        return (double) a / b;
    }
}

工厂类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.operation.AddOperation;
import com.liu.test.factory.simplefactory.operation.DivideOperation;
import com.liu.test.factory.simplefactory.operation.MultiplyOperation;
import com.liu.test.factory.simplefactory.operation.SubOperation;

public class MatchFactory {

    /**
      * 获得具体的操作类型
      * @author kevin
      * @param operator :
      * @return java.util.Optional<com.liu.test.math.MathOperation>
      * @date 2021/1/25 11:36
      */
    public static Optional<MathOperation> getOperation(String operator) {
        MathOperation result = null;
        if("add".equals(operator)){
            result = new AddOperation();
        }else if("sub".equals(operator)){
            result = new SubOperation();
        }else if("multiply".equals(operator)){
            result = new MultiplyOperation();
        }else if("divide".equals(operator)){
            result = new DivideOperation();
        }
        return Optional.ofNullable(result);
    }
}

使用类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        MathOperation operation = MathFactory.getOperation(operator).orElseThrow(() ->
                new IllegalArgumentException("未知的操作"));
        result = operation.apply(first, second);
        return result;

简单工厂模式(静态):

就是在第一步的基础之上,将new的动作提出来,放到static块中执行,然后

将产生的实现类实例存放到静态的map中,用户调用的时候,直接从map中get对应的实例。

此模式不符合java的闭环原则(对扩展开放,对修改关闭)

静态只需调整工厂类即可,其他不变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.operation.AddOperation;
import com.liu.test.factory.simplefactory.operation.DivideOperation;
import com.liu.test.factory.simplefactory.operation.MultiplyOperation;
import com.liu.test.factory.simplefactory.operation.SubOperation;

import java.lang.reflect.InvocationTargetException;
import java.util.Optional;

import java.util.HashMap;
import java.util.Map;

public class MatchFactory {
    static Map<String, MathOperation> operationMap = new HashMap<>();
    static {
        operationMap.put("add", new AddOperation());
        operationMap.put("sub", new SubOperation());
        operationMap.put("multiply", new MultiplyOperation());
        operationMap.put("divide", new DivideOperation());
    }

    public static Optional<Operation> getOperation(String operator) {
        return Optional.ofNullable(operationMap.get(operator));
    }
}

简单工厂模式(反射):

就是在第一步的基础之上,将new的动作去掉,换成反射的方式实现,将接口实现类统一放

在一个包中,然后统一命名规范,最后根据传入反射产生实例对象;用户调用的时候,直接传入

调用类型即可(统一实现类命名规范xxxOperation);只需调整工厂类即可,其他不变:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.lang.reflect.InvocationTargetException;
import java.util.Optional;

/**
  *
  * <p>Title:工厂类</p >
  * <p>ClassName:MatchFactory</p >
  * @author kevin
  * @date 2021/1/26
  */
public class MathFactory {

    private MathFactory() {
        //do nothing
    }

    /**
      * 获得具体的操作类型
      * @author kevin
      * @param operator :
      * @return java.util.Optional<com.liu.test.math.MathOperation>
      * @date 2021/1/26 11:36
      */
    public static Optional<MathOperation> getOperation(String operator) throws ClassNotFoundException,
            IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        //因为类名首字母大写,所以转换操作类型为类名格式
        String operate = operator.substring(0,1).toUpperCase() + operator.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.math.operation." + operate+"Operation");
        return Optional.of((MathOperation)operation.getDeclaredConstructor().newInstance());
    }
}

2.工厂方法模式:

工厂提供接口与实现,实例提供接口与实现

为了解决第一种简单工厂模式的缺陷,产生了工厂方法模式,把工厂方法再次进行抽象,

为不同的实现类,提供不同的工厂,通过实现抽象工厂接口类的方法,实现不同工厂获取

业务实现类的不同实例,调用的时候,通过判断,使用不同的工厂(在简单工厂模式基础上)

抽象一个工厂接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Optional;

public interface MathFactoryInterface {

    Optional<MathOperation> getOperation(String operator) ;
}

工厂接口实现(顺序-加减乘除):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;
import com.liu.test.factory.factorymethod.MathFactoryInterface;
import com.liu.test.factory.simplefactory.operation.AddOperation;

import java.util.Optional;

public class AddFactory implements MathFactoryInterface {
    @Override
    public Optional<MathOperation> getOperation() {
        return Optional.of(new AddOperation());
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.simplefactory.MathOperation;
import com.liu.test.factory.factorymethod.MathFactoryInterface;
import com.liu.test.factory.simplefactory.operation.SubOperation;

import java.util.Optional;

public class SubFactory implements MathFactoryInterface {
    @Override
    public Optional<MathOperation> getOperation() {
        return Optional.of(new SubOperation());
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.factorymethod.MathFactoryInterface;
import com.liu.test.factory.factorymethod.operation.MultiplyOperation;
import com.liu.test.factory.simplefactory.MathOperation;

import java.util.Optional;

public class MultiplyFactory implements MathFactoryInterface {
    @Override
    public Optional<MathOperation> getOperation() {
        return Optional.of(new MultiplyOperation());
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.factorymethod.MathFactoryInterface;
import com.liu.test.factory.factorymethod.operation.DivideOperation;
import com.liu.test.factory.simplefactory.MathOperation;

import java.util.Optional;

public class DivideFactory implements MathFactoryInterface {
    @Override
    public Optional<MathOperation> getOperation() {
        return Optional.of(new DivideOperation());
    }
}

将原有的工厂类MathFactory删除,使用类中调整-增加方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
      * 工厂方法模式
      * @author kevin
      * @param operator :
      * @return com.liu.test.math.factorymethod.MathFactoryInterface
      * @date 2021/1/26 18:41
      */
    private MathFactoryInterface getFactory(String operator){
        MathFactoryInterface result = null;
        if("add".equals(operator)){
            result = new AddFactory();
        }else if("sub".equals(operator)){
            result = new SubFactory();
        }else if("multiply".equals(operator)){
            result = new MultiplyFactory();
        }else if("divide".equals(operator)){
            result = new DivideFactory();
        }
        return Optional.ofNullable(result).orElseThrow(() -> new IllegalArgumentException("未知的操作"));
    }

使用类中调整-更改调用方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        double result;
        MathFactoryInterface factory = getFactory(operator);
        MathOperation operation = factory.getOperation().orElseThrow(() ->
                new IllegalArgumentException("未知的操作"));
        result = operation.apply(first, second);
        return String.valueOf(result);

3.抽象工厂模式:

提供工厂的接口与实现,提供实例的接口与实现,有不同类型的实例(每个类型下有多个实例)

就是将操作归类,然后分别提供接口,同类下的具体事物实现同一个接口。然后抽象一个工厂接口,

按照不同类别,提供不同的待实现工厂方法;再提供具体的工厂实现类,实现抽象的工厂接口,并在不

同的方法(同一类事物的获取方法)中根据入参返回同类事物中具体的事物,最后给到调用者执行。

比如,阿里与百度都有开发人员与产品人员:

首先定义开发人员接口、产品人员接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
  *
  * <p>Title:开发人员</p >
  * <p>ClassName:IDeveloper</p >
  * @author kevin
  * @date 2021/1/27
  */
public interface IDeveloper {
    String work();
    String skill();
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
  *
  * <p>Title:产品人员</p >
  * <p>ClassName:IProductor</p >
  * @author kevin
  * @date 2021/1/27
  */
public interface IProductor {
    String work();
    String skill();
}

开发人员接口实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.cases.IDeveloper;

public class AliDeveloper implements IDeveloper {
    @Override
    public String work() {

        return "我是阿里开发人员,我的工作是:为阿里服务!";
    }

    @Override
    public String skill() {

        return "我是阿里开发人员,我的技能是:java、python、vue、react、js、c、c++、c#......无所不能!";
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.cases.IDeveloper;

public class BaiduDeveloper implements IDeveloper {
    @Override
    public String work() {

        return  "我是百度开发人员,我的工作是:为百度服务!";
    }

    @Override
    public String skill() {

        return  "我是百度开发人员,我的技能是:人工智能、java、python、vue、react、js、c、c++、c#......我也无所不能!";
    }
}

产品人员接口实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.cases.IProductor;

public class AliProductor implements IProductor {
    @Override
    public String work() {

        return  "我是阿里产品,我的工作是:为阿里提供优秀的产品!";
    }

    @Override
    public String skill() {

        return "我是阿里产品,我的技能是:需求与利益的平衡能力,缜密的逻辑思维和较高的业务理解能力!";
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.cases.IProductor;

public class BaiduProductor implements IProductor {
    @Override
    public String work() {

        return "我是百度产品,我的工作是:为百度提供优秀的产品!";
    }

    @Override
    public String skill() {

        return "我是百度产品,我的技能是:需求与利益的平衡能力,缜密的逻辑思维和较高的业务理解能力!";
    }
}

定义工厂接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.cases.IDeveloper;
import com.liu.test.factory.abstractfactory.cases.IProductor;

import java.lang.reflect.InvocationTargetException;

public interface IFactory {
    IProductor getProductor(String type) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
            InvocationTargetException, InstantiationException;

    IDeveloper getDeveloper(String type) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException,
            InvocationTargetException, InstantiationException;
}

阿里工厂接口实现(反射获得实例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.IFactory;
import com.liu.test.factory.abstractfactory.cases.IDeveloper;
import com.liu.test.factory.abstractfactory.cases.IProductor;

import java.lang.reflect.InvocationTargetException;
import java.util.Optional;

public class AliFactory implements IFactory {

    @Override
    public IProductor getProductor(String type) throws ClassNotFoundException, NoSuchMethodException,
            IllegalAccessException, InvocationTargetException, InstantiationException {
        //因为类名首字母大写,所以转换操作类型为类名格式
        String operate = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.factory.abstractfactory.cases.impl." + operate + "Productor");
        return Optional.of((IProductor)operation.getDeclaredConstructor().newInstance()).orElseThrow(() ->
                new IllegalArgumentException("未知的公司"));
    }

    @Override
    public IDeveloper getDeveloper(String type) throws ClassNotFoundException, NoSuchMethodException,
            IllegalAccessException, InvocationTargetException, InstantiationException {
        //因为类名首字母大写,所以转换操作类型为类名格式
        String operate = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.factory.abstractfactory.cases.impl." + operate + "Developer");
        return Optional.of((IDeveloper)operation.getDeclaredConstructor().newInstance()).orElseThrow(() ->
                new IllegalArgumentException("未知的公司"));
    }
}

百度工厂接口实现(反射获得实例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.liu.test.factory.abstractfactory.IFactory;
import com.liu.test.factory.abstractfactory.cases.IDeveloper;
import com.liu.test.factory.abstractfactory.cases.IProductor;

import java.lang.reflect.InvocationTargetException;
import java.util.Optional;

public class BaiduFactory implements IFactory {

    @Override
    public IProductor getProductor(String type) throws ClassNotFoundException, NoSuchMethodException,
            IllegalAccessException, InvocationTargetException, InstantiationException {
        //因为类名首字母大写,所以转换操作类型为类名格式
        String operate = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.factory.abstractfactory.cases.impl." + operate + "Productor");
        return Optional.of((IProductor)operation.getDeclaredConstructor().newInstance()).orElseThrow(() ->
                new IllegalArgumentException("未知的公司"));
    }

    @Override
    public IDeveloper getDeveloper(String type) throws ClassNotFoundException, NoSuchMethodException,
            IllegalAccessException, InvocationTargetException, InstantiationException {
        //因为类名首字母大写,所以转换操作类型为类名格式
        String operate = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.factory.abstractfactory.cases.impl." + operate + "Developer");
        return Optional.of((IDeveloper)operation.getDeclaredConstructor().newInstance()).orElseThrow(() ->
                new IllegalArgumentException("未知的公司"));
    }
}

通过调用不同的抽象工厂的实现获得具体的实例,执行方法得到想要的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        String result = "";
        //获得具体的工厂(反射)
        String operate = operator.substring(0,1).toUpperCase() + operator.substring(1).toLowerCase();
        Class<?> operation = Class.forName("com.liu.test.factory.abstractfactory.factory." + operate + "Factory");
        IFactory factory = (IFactory)operation.getDeclaredConstructor().newInstance();
        //通过工厂获得公司开发人员
        IDeveloper developer = factory.getDeveloper(operate);
        result += developer.work() +"\n";
        result += developer.skill() +"\n";
        //通过工厂获得公司产品人员
        IProductor productor = factory.getProductor(operate);
        result += productor.work() +"\n";
        result += productor.skill() +"\n";
        return result;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162277.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式之简单工厂模式
简单工厂模式,需要说明的是,它并不属于GOF 23种设计模式中的一种。但它却丰富了工厂模式家族,因为其简单的思想和使用方式,也有很广泛的使用
AI.NET 极客圈
2019/07/19
2840
设计模式之简单工厂模式
实现一个工厂模式
工厂模式是一种创建型设计模式,旨在提供一种方法来实例化对象,而无需直接使用对象的具体实现类。通过工厂模式,客户端可以从工厂对象中请求所需类型的对象,而不需要了解对象的创建细节。
GeekLiHua
2025/01/21
820
工厂模式
可批量生产、达到标注化。解决用户和产品之间的关系。 对于调用者来说不关心产生的具体逻辑,只关心结果;而对于工厂来说,保证我们产生出来的结果是符合国际化标准的。 工厂模式:只对结果负责,确保产品的标准化。
如来
2022/05/13
1990
工厂模式
Java 工厂设计模式详解
工厂设计模式(Factory Pattern)是最常用的设计模式之一,属于创建型模式。其核心思想是通过引入一个工厂类来实例化对象,而不是直接在客户端代码中使用 new 关键字来创建对象。这种方式能够将对象的创建过程封装起来,使得代码更加灵活、可扩展、易于维护。
HandsomeYo
2025/04/03
1060
Java 工厂设计模式详解
Java设计模式——工厂模式讲解以及在JDK中源码分析
小熊学Java个人网站:https://javaxiaobear.gitee.io/
小熊学Java
2023/07/16
2460
Java设计模式——工厂模式讲解以及在JDK中源码分析
最全工厂设计模式案例详解,不服来辩!
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,今天我们一起来彻底解析一下它。
Java极客技术
2022/12/02
4300
最全工厂设计模式案例详解,不服来辩!
iOS设计模式之简单工厂模式
最近在看关于设计模式的书籍,开始觉得在设计程序架构之时,能够灵活运用这些设计模式,代码将变得非常具有美感。一个好的设计模式使得程序更加的灵活,容易修改,易于使用。
Originalee
2018/08/30
7660
Java设计模式之工厂模式
工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性。
shaoshaossm
2022/12/27
2680
Java设计模式之工厂模式
工厂模式 Factory Pattern
Factory Pattern,是 Java 常用的设计模式之一。它提供了一种与创建逻辑无关的创建实例的能力。
FoamValue
2020/11/06
3720
【java设计模式】之 工厂模式
使用场景:在任何需要生成复杂对象的地方,都可以使用工厂方法模式。 直接用new可以完成的不需要用工厂模式
用户5640963
2019/07/26
2750
【java设计模式】之 工厂模式
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
在软件设计中,工厂模式是一种常见的设计模式,它提供了一种创建对象的最佳方式。通过工厂模式,我们可以将对象的创建逻辑与使用逻辑分离,降低代码的耦合度,提高系统的可扩展性和可维护性。
公众号:码到三十五
2024/03/19
1940
设计模式之工厂模式
将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 实例化对象,用工厂方法代替new操作。
时间静止不是简史
2020/07/24
4240
设计模式之工厂模式
设计模式——工厂模式详解(代码演示)
在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。
小尘要自信
2023/10/10
2770
Java设计模式—工厂模式
工厂模式主要是为创建对象提供了接口。工厂模式分为三类: 1. 简单工厂模式(Simple Factory)  2. 工厂方法模式(Factory Method)  3. 抽象工厂模式(Abstract Factory) 
翎野君
2023/05/12
3510
Java设计模式—工厂模式
大话设计模式--第一章 简单工厂设计模式
从这四个方面考虑. 上面这段代码, 维护性差, 改一个地方很可能或误改正确的地方; 复用性, 除了计算器, 其他地方基本不可用. 扩展性也不好, 添加一个开方, 可能误改加减乘除. 灵活性, 就没有.
用户7798898
2020/09/27
3920
大话设计模式--第一章 简单工厂设计模式
【云+社区年度征文】设计模式-工厂模式(简单工厂、工厂方法、抽象工厂)
个工厂对象决定创建出哪一种产品类的实例**。定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)。当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。
唔仄lo咚锵
2020/11/29
4270
简单工厂模式
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式。设计模式分为创建型模式、结构型模式、行为型模式,简单工厂模式属于创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
mingmingcome
2021/11/29
2710
简单工厂模式
深入理解Java的三种工厂模式
简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类
芋道源码
2019/10/29
2200
【大话设计模式】——工厂模式家族
在工厂模式家族中最出名的是工厂三姐妹,根据抽象的程度不同分为简单工厂、工厂模式和抽象工厂模式。他们在我们平时的编程中会经常使用。所以我们应该详细地了解一下他们三者之间优缺点。
程序猿小亮
2021/01/29
3050
23种设计模式之工厂模式
现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。
Java技术债务
2022/09/26
3400
23种设计模式之工厂模式
相关推荐
设计模式之简单工厂模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验