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的常用工具
Jun 11 Java/Android
详解JAVA中的OPTIONAL
Jun 14 Java/Android
SpringBoot生成License的实现示例
Jun 16 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
Java后台生成图片的完整步骤
Aug 04 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
MyBatis自定义SQL拦截器示例详解
Oct 24 Java/Android
Java tomcat手动配置servlet详解
Nov 27 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 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/10/09 PHP
php密码生成类实例
2014/09/24 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
JS无限树状列表实现代码
2011/01/11 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python调用自定义函数的实例操作
2019/06/26 Python
python中字典增加和删除使用方法
2020/09/30 Python
印度民族服装购物网站:BIBA
2019/08/05 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
介绍Java的内部类
2012/10/27 面试题
好邻里事迹材料
2014/01/16 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
小学信息技术教学反思
2014/02/10 职场文书
运动会口号16字
2014/06/07 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2014年减负工作总结
2014/12/10 职场文书
会议开幕词
2015/01/28 职场文书
2015年招生工作总结
2015/05/04 职场文书
文化大革命观后感
2015/06/17 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库