Java 深入探究讲解简单工厂模式


Posted in Java/Android onApril 07, 2022

1. 简单工厂介绍

简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。

注意:简单工厂模式 不属于23种设计模式之列

2. 简单工厂类图UML

Java 深入探究讲解简单工厂模式

3. 简单工厂角色说明

简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象。

抽象产品(Product):是简单工厂创建所有对象的父类,负责描述所有实例公有的公共接口

具体产品(ConcreteProduct):是简单工厂创建的具体对象

4. 代码实现

简单工厂实现:

/**
 * 抽象产品,提供所有具体产品的共有的方法
 */
public interface Product {
    public void show();
}
​
/**
 * 具体产品1
 */
public class ConcreteProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("具体产品1展示...");
    }
}
​
​
/**
 * 具体产品2
 */
public class ConcreteProduct2 implements Product {
    @Override
    public void show() {
        System.out.println("具体产品2展示...");
    }
}
​
/**
 * 简单工厂
 */
public class SimpleFactory {
    //提供一个方法,基于不同的参数获取不同的实例对象
    public static Product getConcreteProduct(int productType) {
        switch (productType) {
            case Const.Product1:
                return new ConcreteProduct1();
            case Const.Product2:
                return new ConcreteProduct2();
            case Const.Product3:
                return new ConcreteProduct3();
        }
        return null;
    }
​
​
    final class Const {
        static final int Product1 = 1;//表示是ConcreteProduct1产品
        static final int Product2 = 2;//表示是ConcreteProduct2产品
        static final int Product3 = 3;//表示是ConcreteProduct3产品
    }

调用方式:

//获取产品1
        Product product = SimpleFactory.getConcreteProduct(Const.Product1);
        product.show();
        //获取产品2
        Product product1 = SimpleFactory.getConcreteProduct(Const.Product2);
        product1.show();

使用步骤:

  • 创建抽象产品类和定义具体产品的公共接口
  • 创建具体产品类,定义生产的具体产品
  • 创建工厂类,通过创建静态方法根据传入不同的参数从而创建不同的具体产品的实例
  • 外界通过调用工厂类的静态方法,传入不同的参数创建不同的产品实例

5. 优缺点

优点:

  • 代码逻辑比较简单,工厂类包含必要的创建对象的逻辑,可以决定创建具体的产品
  • 调用方无需指导所创建具体产品的类名,只需要知道参数即可

缺点:

  • 简单工厂违背开闭原则,工厂类负责产品的创建职责过重,一旦新增产品需要对工厂类内部逻辑新增判断
  • 系统扩展困难,产品过多会造成逻辑过于复杂

6. 使用场景

对于产品种类比较少的情况,可以考虑使用简单工厂,调用方只需要传入工厂类的参数,不需要关注如何创建的逻辑.

到此这篇关于Java 深入探究讲解简单工厂模式的文章就介绍到这了,更多相关Java 简单工厂模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
解析Java中的static关键字
Jun 14 Java/Android
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
看完这篇文章获得一些java if优化技巧
Jul 15 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Java版 简易五子棋小游戏
May 04 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
springboot用户数据修改的详细实现
Apr 06 #Java/Android
Java中API的使用方法详情
Java 获取Word中所有的插入和删除修订的方法
springboot应用服务启动事件的监听实现
Apr 06 #Java/Android
Java十分钟精通进阶适配器模式
mapstruct的用法之qualifiedByName示例详解
Apr 06 #Java/Android
Spring Boot项目传参校验的最佳实践指南
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
PHP网站提速三大“软”招
2006/10/09 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
迟到检讨书大全
2014/01/25 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
单位工作证明书格式
2014/10/04 职场文书
小学生节水倡议书
2015/04/29 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python