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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
一篇文章带你复习java知识点
Jun 28 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
spring boot实现文件上传
Aug 14 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
第七节--类的静态成员
2006/11/16 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python表格存取的方法
2018/03/07 Python
python树莓派红外反射传感器
2019/01/21 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python中比较两个列表的实例方法
2019/07/04 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
中学教师管理制度
2014/01/14 职场文书
音乐节策划方案
2014/06/09 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书