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使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
Jul 16 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
Java 实现限流器处理Rest接口请求详解流程
Nov 02 Java/Android
java代码实现空间切割
Jan 18 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Spring Boot实现文件上传下载
Aug 14 Java/Android
Java实现贪吃蛇游戏的示例代码
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数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
微信小程序slider组件使用详解
2018/01/31 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
用Pygal绘制直方图代码示例
2017/12/07 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python 字典操作提取key,value的方法
2019/06/26 Python
opencv 阈值分割的具体使用
2020/07/08 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
农贸市场管理制度
2014/01/31 职场文书
安全生产演讲稿
2014/05/09 职场文书
节电标语大全
2014/06/23 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
初中学习计划书范文
2014/09/15 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript