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 相关文章推荐
ConstraintValidator类如何实现自定义注解校验前端传参
Jun 18 Java/Android
Java实现二维数组和稀疏数组之间的转换
Jun 27 Java/Android
java基础——多线程
Jul 03 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
Java工作中实用的代码优化技巧分享
Apr 21 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP4中实现动态代理
2006/10/09 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
python函数返回多个值的示例方法
2013/12/04 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
python绘制封闭多边形教程
2020/02/18 Python
python实现PCA降维的示例详解
2020/02/24 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
产品生产计划书
2014/05/07 职场文书
网络营销计划
2015/01/17 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫