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 Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
Feign调用全局异常处理解决方案
Jun 24 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
mybatis中注解与xml配置的对应关系和对比分析
Aug 04 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Java 超详细讲解ThreadLocal类的使用
Apr 07 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Java Redisson多策略注解限流
Sep 23 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如何得到当前页和上一页的地址?
2006/11/27 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
DEFER怎么用?
2006/07/01 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
Vue3.x源码调试的实现方法
2019/10/13 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
python中的decimal类型转换实例详解
2019/06/26 Python
python实现连连看游戏
2020/02/14 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
毕业生自我鉴定范文
2013/11/08 职场文书
参观接待方案
2014/03/17 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
欢迎横幅标语
2014/06/17 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
雷锋之歌观后感
2015/06/10 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
MySQL基础(一)
2021/04/05 MySQL