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中Collection的一些常用方法总结
Jun 13 Java/Android
浅析NIO系列之TCP
Jun 15 Java/Android
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
Java 中的 Unsafe 魔法类的作用大全
Jun 26 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Android开发 使用文件储存的方式保存QQ密码
Apr 24 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
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实现登陆验证码(类似条行码状)
2006/10/09 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
Python模块的加载讲解
2019/01/15 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
python对XML文件的操作实现代码
2020/03/27 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
户籍证明的格式
2014/01/13 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
监理中标通知书
2015/04/16 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书