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 Swing实现自助取款机系统
Jun 11 Java/Android
SpringBoot生成License的实现示例
Jun 16 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
Jan 22 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 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邮件类
2007/01/03 PHP
php5中类的学习
2008/03/28 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
php swoft框架实例用法
2020/12/22 PHP
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
jQuery事件用法详解
2016/10/06 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
python socket 聊天室实例代码详解
2019/11/14 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
IBatis持久层技术
2016/07/18 面试题
监理资料员岗位职责
2014/01/03 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
成立公司计划书
2014/05/07 职场文书
2014年项目工作总结
2014/11/24 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
个人总结与自我评价
2015/02/14 职场文书
同意离婚答辩状
2015/05/22 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android