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 相关文章推荐
Springboot如何使用logback实现多环境配置?
Jun 16 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
详解JAVA的控制语句
Nov 11 Java/Android
关于Mybatis中SQL节点的深入解析
Mar 19 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
JAVA 线程池(池化技术)的实现原理
Apr 28 Java/Android
Android Studio 计算器开发
May 20 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
HttpClient实现表单提交上传文件
Aug 14 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 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数组(array)输出的三种形式详解
2013/06/05 PHP
treepanel动态加载数据实现代码
2012/12/15 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现简单购物商城
2016/05/21 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python求质数的3种方法
2018/09/28 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
产品包装策划方案
2014/05/18 职场文书
服务标语大全
2014/06/18 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
Python实现视频自动打码的示例代码
2022/04/08 Python
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python