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基础之this关键字的使用
Jun 30 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
SpringBoot使用AOP实现统计全局接口访问次数详解
Jun 16 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
Java Spring读取和存储详细操作
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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
php curl常用的5个经典例子
2017/01/20 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
用Python编写web API的教程
2015/04/30 Python
python计算圆周率pi的方法
2015/07/11 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
Django获取应用下的所有models的例子
2019/08/30 Python
python字符串的拼接方法总结
2019/11/18 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
《我的第一本书》教学反思
2014/02/15 职场文书
同学聚会策划方案
2014/06/06 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
专项资金申请报告
2015/05/15 职场文书
圆明园观后感
2015/06/03 职场文书
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android