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 将PPT幻灯片转为HTML文件的实现思路
Jun 11 Java/Android
图解排序算法之希尔排序Java实现
Jun 26 Java/Android
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
java中用float时,数字后面加f,这样是为什么你知道吗
Sep 04 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
Java 关于String字符串原理上的问题
Apr 07 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Java设计模式中的命令模式
Apr 28 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Android实现获取短信验证码并自动填充
May 21 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
php 伪静态之IIS篇
2014/06/02 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
前端微信支付js代码
2016/07/25 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
高效使用Python字典的清单
2018/04/04 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
在Python中增加和插入元素的示例
2018/11/01 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
使用Python实现牛顿法求极值
2020/02/10 Python
使用Django清空数据库并重新生成
2020/04/03 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
感恩的演讲稿
2014/05/06 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server