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中重写父类方法加不加@Override详解
Jun 21 Java/Android
详解Java实现设计模式之责任链模式
Jun 23 Java/Android
使用feign服务调用添加Header参数
Jun 23 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
gateway网关接口请求的校验方式
Jul 15 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
Aug 02 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
SpringBoot全局异常处理方案分享
May 25 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
Jun 10 Java/Android
Spring boot admin 服务监控利器详解
Aug 05 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 神盾解密
2014/06/08 PHP
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
Python简单实现控制电脑的方法
2018/01/22 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
优秀演讲稿范文
2013/12/29 职场文书
大学校运会广播稿
2014/02/03 职场文书
文案策划求职信
2014/03/18 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
老乡聚会通知
2015/04/23 职场文书
初中班主任工作随笔
2015/08/15 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
优化Mysql查询的示例
2022/04/26 MySQL