工厂模式与抽象工厂在实际项目中的应用

2023-11-07

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置;

比如在我的一个报表系统中,有一种报表生成事件,该事件实现run接口,实现具体的报表生成操作,但是它不能被new出来,因为它需要依赖spring的依赖注入的各种service对象.  所以这时就需要工厂模式


类图:


抽象的基础报表导出事件



其中的一个子类:



工厂类:




生产报表事件:

ReportEvent reportEvent = ReportEventFactory.getInstance().createEvent(DhOrderReportEvent.class,parameter);
将事件放到队列里

boolean add = TaskQueueUtil.reportQueue.add(reportEvent);
取出报表事件,执行操作

ReportEvent reportEvent = TaskQueueUtil.reportQueue.poll();
if (reportEvent!=null) {
    threadPoolTaskExecutor.execute(reportEvent);
}

工厂模式解决的问题:将同一类的对象的创建收集成一个工厂类,通过参数来区分实际生产的对象,其实,工厂模式是面向接口编程的一种实现.

还有一种例子是java的jdbc实现,操作数据库的统一接口,再有一个工厂类,由工厂类的参数来决定生产的对象是面向mysql的还是oracle的.

案例:报表系统的报表事件,cxf客户端,java的jdbc实现.

cxf客户端:由工厂来统一生产各接口的具体实现,具体实现很复杂,封装起来.





抽象工厂方法  其实是  工厂方法的一种升级.  应用于更复杂的业务场景.






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工厂模式与抽象工厂在实际项目中的应用 的相关文章

  • 使用arduino Nano 自制nRF24LE1 的烧录器进行固件烧录

    也有专门usb编程器 比较贵 可以买个arduino nano自已做一个 1 下载arduino的烧录固件 https github com garcezluz nRF24LE1 Programmer 2 使用arduino编译烧录固件 3
  • 计算机毕业设计如何制作电子商务网站怎么制作购物网站计算机课程设计电子商城做什么(PHP-ASP.NET-c#-JavaWeb-SSM-SSH-J2EE-springBoot

    如果计算机毕业设计选题是 lt lt 电子商务网站 gt gt lt lt 购物网站 gt gt 这样的题目 那么灵魂问答如下 需要实现什么功能呢 怎么样挑选适合自己的编程语言 使用什么前端框架 使用什么数据库 通过本文将给您找到以上答案
  • 【linux kernel】linux内核数据结构分析之哈希表

    Linux内核中实现了一套经典的哈希表操作 定义在 include linux list h文件中 本文基于linux内核源码6 2 7 记录了其常用操作哈希表的API函数 便于在阅读linux内核源码时更好的理解程序执行的过程和细节 在L
  • 外部中断实验

    外部中断简介 前一篇详细介绍了51 单片机的中断系统 这里再简单回顾一下 当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求 要求 CPU 暂停当前的工作 转而去处理这个紧急事件 处理完以后 再回到原来被中断的地方 继续原来的
  • Swift set/get方法

    Swift 中重写属性的set和get方法 Swift中如何重写属性的set和get方法 set和get方法的本质是什么 set和get方法紧跟着属性后面写 很紧凑 也清楚 class Person NSObject var name st
  • 并发编程系列——6线程池核心原理分析

    学习目标 线程池的作用 jdk给我们提供了哪几种常用线程池 线程池有哪几大核心参数 线程池的拒绝策略有哪些 线程中阻塞队列的作用 线程池的工作流程 线程池的设计思维 线程池中的阻塞队列如果用默认的 会有哪些问题 线程池的工作状态有哪些 线程
  • openERP为何改名odoo

    5月15日 OpenERP S A 在合作伙伴Webinar 宣布 OE即将改名Odoo 融资1000万美元 代码托管更换到Github 很多内容 OpenERP 名字更改 合作伙伴合作方式也有新政策 OpenERP开源 Odoo仍将继续开
  • go语言判断 slice,array,map中是否存在某个元素

    最近在用go重构以前python写的项目 遇到一些问题 总结一下 自己水平比较菜 遇到问题较低级 自己总结一下 免得忘了 很简单的需求 判断某个元素是否在 slice array map中 其实很简单 但是还是python最简单啊 func
  • 微信消息模板换行符转义问题处理

    通常的微信模板 Hello n n Are you OK 直接定义字符串 数据库中读取 这里需要说明的是 数据库读取 的内容 如果直接推送 n n是没有被转移为换行符的 此时需要 tplStr readDb tpl str replace
  • Hbase 常用 Shell 命令

    一 基本命令 打开 Hbase Shell hbase shell 1 1 获取帮助 获取帮助 help 获取命令的详细信息 help status 1 2 查看服务器状态 status 1 3 查看版本信息 version 二 关于表的操
  • OBB盒的实现

    制造几何仿真中的碰撞检测通常视为针对刚体对象间的碰撞检测 这样的话可以把非刚体即软体的建模和变形算法对碰撞检测的影响减少到最小 常见成熟的基于包围盒的碰撞检测 box intersection test 算法如 1 沿坐标轴的包围盒AABB
  • python typing库_Python3标准库漫游之Typing.overload

    Python3标准库漫游之Typing overloadPython3 gt 3 5 Python3 5开始Python把Typing作为标准库引入 低版本可以使用独立的Typing包 问题来源于一个QQ群友的提问 顺着问题我看了下Typi
  • 学计算机用苹果本,新手小白用苹果电脑搞科研,学会这些才不至于尴尬!

    搞科研的朋友们每天都离不开电脑 于是 科研界又分为 Windows 派和 Mac 派 要想提高生产力 本人还是想大吼一声 Mac 大法好 看着师弟师妹对着苹果电脑咬牙切齿 恨不得分分钟砸了它 殊不知不是系统不好用 而是我们了解得太少 如何避
  • 数字图像处理汇总(附实现代码)

    包含所有代码的GitHub地址 https github com Code 0x00 pyCV 标题及连接 摘要 数字图像彩色空间 RGB HSV Lab CMYK 及其转换公式 灰度共生矩阵 GLCM 附Python代码 灰度共生矩阵的原
  • Element el-table 列表自动滚动

    1 首先在
  • 数字IC手撕代码-分频器(任意小数分频)

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • Dynamics CRM 分页查询

    分页查询 FetchXML查询 表达式查询 在使用CRM组织服务查询的时候 默认查询数据条数最大值为5000条 想查询全部的数据需要使用分页查询 FetchXML查询 官网实例 单次查询的个数 int pageSize 5000 第几页 i
  • 逐行读取数据,并查找特定数据

    import java io BufferedReader import java io FileReader import java io InputStreamReader public class Solution public st
  • SSH框架总结(框架分析+环境搭建+实例源码下载)

    首先 SSH不是一个框架 而是多个框架 struts spring hibernate 的集成 是目前较流行的一种Web应用程序开源集成框架 用于构建灵活 易于扩展的多层Web应用程序 集成SSH框架的系统从职责上分为四层 表示层 业务逻辑
  • mysql盲注脱裤_白帽子挖洞—SQL注入篇

    0x00介绍 SQL注入 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命令 具体来说 它是利用现有应用程序 将 恶意的 SQL命令注入到后台数据库引擎执行的能力 它可以通过在W

随机推荐

  • pta 评委打分

    评委打分 青年歌手参加歌曲大奖赛 有10个评委进行打分 将评分按降序排列 试编程求这位选手的平均得分 去掉一个最高分和一个最低分 指导 这道题的核心是排序 将评委所打的10个分数利用数组按降序排列 计算数组中除第一个和最后一个分数以外的数的
  • Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path

    今天使用axis2访问https格式的webservice 遇到了这个错误Caused by javax net ssl SSLHandshakeException sun security validator ValidatorExcep
  • jupyter notebook安装过程中碰到的问题:1、juepyter notebook按new创建新文件时弹出来的网页是4042、jupyter代码运行时直接跳到下一行没有运行代码

    1 juepyter notebook按new创建新文件时弹出来的网页是404是浏览器的问题 更换默认浏览器即可在系统中搜索默认应用把web浏览器改成edge 如果在更改时一直闪退无法更改默认浏览器可能是你的电脑管家工具箱的浏览器帮你自动锁
  • Linux获得管理员权限

    一 判断此时使用用户是否具有管理员权限 1 采用符号 进行判断 若使用具有管理员权限的用户登录时 将出现 符号 若使用不具有管理员权限的用户登录时 将出现 符号 2 使用uid gid 的group进行判断 具有管理员权限的用户将与root
  • TypeScript 快速上手学习系列 —— 接口

    TypeScript 接口 TypeScript 接口是一系列抽象方法的声明 是一些方法特征的集合 这些方法都是抽象的 需要由具体的类去实现 然后第三方就可以通过这些抽象方法调用 让具体的类执行具体的方法 定义 TypeScript 接口定
  • 以太坊智能合约安全监测工具 Oyente

    金色财经讯 2017年6月19日 数字资产管理公司Melonport AG与Oyente的开发者们合作 发布了一个测试版分析工具 旨在检查可执行的分布式代码合同 EDCC 的缺陷 Melonport和Oyente发布Bug检查工具 来源 金
  • Java多版本环境并存配置

    安装准备 Windows10 java8的jdk java15的jdk 本次操作是在Windows10的系统下进行的 注意 可能java对中文支持的原因 最好java环境和程序使用的路径中不要包含中文 java8 java8最简单的方式就是
  • dataframe数据按行做线性拟合

    转载 https blog csdn net m0 37324740 article details 79529963 数据形式 目的 对每一行进行线性拟合 计算斜率和评估斜率的不确定性 方法 调用python的sklearn包中的线性回归
  • 计网 -《图解http》读书笔记

    1 了解Web 网络基础 1 1 WWW World Wide Web 万维网 3项WWW构建技术 把SGML 通用标记语言 作为页面的文本标记语言的HTML HyperText Markup Language 超文本标记语言 作为文档传递
  • linux 时区 -0500,Nodejs 修改 Linux 时间、时区

    最近遇到了时区设置的问题 在Nodejs中 取当前时间 GMT格式 可以使用Date var GMTDate new Date Sun Mar 06 2016 20 42 44 GMT 0500 GMT 1 但有时候server的时间要求是
  • Java异步注解@Async详解

    一 Async注解 Async的作用就是异步处理任务 在方法上添加 Async 表示此方法是异步方法 在类上添加 Async 表示类中的所有方法都是异步方法 使用此注解的类 必须是Spring管理的类 需要在启动类或配置类中加入 Enabl
  • eclipse 导入svn 项目报 库不存在 svn: E210004: Handshake failed, data stream ended unexpectedly

    eclipse导入SVN项目报错 preface 取消代理设置 遇到 eclipse marketplace 不能打开 推荐一个 eclipse 暗黑主题 参考链接 preface 这个问题之前已经遇到 过一次 竟然忘记了 handshak
  • QT 解决提升控件后提示 No such file or directory

    在QtCreator中 给控件做提升时 提示 No such file or directory 很明显 QtCreator找不到自定义控件文件 那么可以在pro文件里面添加一句代码 INCLUDEPATH PWD widgets 自定义控
  • 周立功串口服务器维修方法,周立功医生

    涨姿势RS485作为一项标准通信协议 在工业中得到了广泛的应用特别是仪器仪表中 RS485的特点是可以组网通信且布线简单 一个主机通过RS485总线可以与多个从机通信 在实际应用中RS485通信抗干扰能力虽然强 但是必要的保护措施还是不可缺
  • 线上页面有时候elementui 的字体图标会乱码

    1 错误现象 2 问题分析 3 解决方法 3 唠嗑唠嗑 大白鹅say 针对我项目问题分析原因可能是 因为vue脚手架编译使用的和elemntui里面编译的工具不一样 如若有错误部分 请指出来 我会改正 1 错误现象 2 问题分析 查阅资料之
  • 关于SecurityException RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED

    关于SecurityException RECEIVER EXPORTED or RECEIVER NOT EXPORTED https github com android play billing samples issues 618
  • Servlet 实现上传文件

    1 基于 form 表单实现的上传文件 核心方法 HttpServletRequest 类方法 方法 描述 Part getPart String name 获取请求中给定 name 的文件 Collection
  • [创业之路-44] :复盘与自省 - 如何选择创业公司

    目录 1 看公司的愿景 X 2 看老板 X 3 看创始团队 X gt Y 4 看核心团队 X 5 看融资能力 6 看盈利能力 7 看市场 Y 8 客户 9 看产品 X 10 看技术 11 看内部管理 X 12 看个人的职位和股权 Y 13
  • ElementUI浅尝辄止29:Breadcrumb 面包屑

    显示当前页面的路径 快速返回之前的任意页面 1 如何使用 在el breadcrumb中使用el breadcrumb item标签表示从首页开始的每一级 Element 提供了一个separator属性 在el breadcrumb标签中
  • 工厂模式与抽象工厂在实际项目中的应用

    在面向对象编程中 最通常的方法是一个new操作符产生一个对象实例 new操作符就是用来构造对象实例的 但是在一些情况下 new操作符直接生成对象会带来一些问题 举例来说 许多类型对象的创造需要一系列的步骤 你可能需要计算或取得对象的初始设置