抽象工厂模式-Abstract Factory Pattern

原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/

引言

首先我们由一个实际问题来引出抽象工厂模式。

考虑这样一个场景,系统中需要向OSS上传文件,以及通过OSS下载文件。而在系统中有不同的业务在使用这两个功能。如下图:

伪代码如下


public interface FileUploader {/*** 上传文件** @param file 文件* @return 文件路径*/String uploadFile(File file);
}public interface FileDownloader {/*** 下载文件* @param path 文件路径* @return 文件流*/InputStream download(String path);
}@Slf4j
public class AliyunFileUploaderImpl implements FileUploader {@Overridepublic String uploadFile(File file) {log.info("向阿里云OSS上传文件");return "/test/" + file.getName();}
}@Slf4j
public class AliyunFileDownloaderImpl implements FileDownloader {@Overridepublic InputStream download(String path) {log.info("通过阿里云下载文件");// 这里只是模拟文件下载,所以不创建文件流,而是使用空文件流return ByteArrayInputStream.nullInputStream();}
}@Slf4j
public class XxxService1 {private final FileUploader fileUploader = new AliyunFileUploaderImpl();public void doService(File file) {String filePath = this.fileUploader.uploadFile(file);log.info("文件上传到了:{}", filePath);log.info("XxxService1 执行其他业务代码");}
}@Slf4j
public class XxxService2 {private final FileUploader fileUploader = new AliyunFileUploaderImpl();private final FileDownloader fileDownloader = new AliyunFileDownloaderImpl();public void doService1(File file) {String filePath = this.fileUploader.uploadFile(file);log.info(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率,这是一个有趣的话题。 相信不同的人有不同的观点,大家的知识背景和从事的工作都不完全相同,所以最终ChatGPT能起到的作用也不一样。 在编程过程中,如果我们要找一个库,我们最先做的肯定…

算法讲解之字符串

前言: 本文主要讲解算法中和字符串结合的题目,跟字符串结合的算法题种类丰富,主要是跟别的算法结合,下面介绍几道比较经典的题目~ 第一道:14. 最长公共前缀 题目描述: 编写一个函数来查找字符串数组中的…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

生活篇——华为手机去除负一屏

华为手机去除如下图的恶心负一屏 打开华为的应用市场app 进入:我的-设置-国家/地区(改为俄罗斯)-进入智慧助手检查更新并更新智慧助手。 然后重复开始的操作,将地区改回中国,这样就没有负一屏了。

初中生用什么台灯最好?精选高口碑的学生护眼台灯

其实现在的孩子从上初中开始,他们的学习压力就已经很大了,繁重的功课让他们经常用眼过度,导致早早就戴上小眼镜。所以要想孩子拥有一个良好的视力健康,不仅要从日常的坐姿、用眼习惯开始纠正、培养,夜晚学习时的那一盏…

状态监测防火墙详细工作流程

状态监测防火墙是一种用于监测和分析网络通信状态的安全设备。其工作流程通常包括以下几个步骤: 1. 采集数据:防火墙会采集来自网络流量的数据,包括 IP 地址、端口号、协议类型等信息,并将其存储在数据库中。 2. 分析数据&#xf…

CPython:表达式的求值顺序(evaluation order)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 C中表达式的求值 C语言针对表达式的计算,设置了操作符的优先级和结合性这两个特性,优先级用于解析不同优先级的符号,结合性用于解析…

2024年,要特别注意这两个方位

家居风水对每个家庭都非常重要,可在无形中影响到人们的事业、财富以及健康运势。俗话说:“风水轮流转”,2024年为甲辰龙年,斗转星移、九宫飞星将改变宫位,新一年的磁场即将启动,方位的吉凶也会重新变动&…

oracle单机打DBBP补丁

书接上回 ORA-600 adg无法查询故障-CSDN博客 https://blog.csdn.net/q195136130/article/details/135445378?spm1001.2014.3001.5502 单机安装DBBP 解压缩补丁包 unzip p34204559_121020_Linux-x86-64.zip 关闭数据库 su - oraclesqlplus / as sysdbashut immediate 检查…

Mac上软件闪退(意外退出)的解决方法

mac苹果电脑上运行软件会意外退出,怎么办,可以试试下面的方法,亲测可行! 第一种方法: 1、打开访达,进入应用程序目录,找到闪退的软件图标,在软件图标上右键选择“显示简介”&#…

OpenCV 人脸检测(易上手版)

在丰富多彩的计算机视觉世界中,人脸检测是最有趣和最广泛应用的领域之一。无论是在安全系统、用户界面控制,还是在社交媒体中应用过滤器,准确有效地检测人脸的能力都是至关重要的。今天,很高兴与大家分享如何在 Python 中使用 Ope…

【网络攻防实验】【北京航空航天大学】【实验三、口令破解(Password Cracking)实验】

实验三、口令破解(Password Cracking)实验 一、 L0phtCrack破解实验 1、 注册L0phtCrack: 2、 设置口令: (1) 创建3个新账户: 帐户创建过程(以test-1为例): 帐户创建结果: (2) 使用L0phtCrack破解口令:(使用管理员账号运行程序) 口令破解结果: 正确破解口令…

探讨深度学习

深度学习 深度学习概述进展崛起框架 主页传送门:📀 传送 深度学习 概述 深度学习是机器学习领域的一个分支,它是一种基于人工神经网络的学习方法,旨在让 计算机模仿人类大脑的神经结构和学习方式,从大量数据中学习并…

代码随想录算法训练营Day25|回溯算法·组合总和III,电话号码的字母组合

组合总和III 题目:找出所有相加之和为n的k个数的组合。组合中只允许含有1-9的正整数,并且每种组合中不存在重复的数字。 组合变量个数为k个,和为n。简单思路是使用k重循环,一层层找出来,然后把每一层的数相加&#x…

操作系统——1.1 操作系统的基本概念1.2 操作系统发展历程

参考课程是王道上传到b站的操作系统,主讲老师是咸鱼,相关的截图都是课程内的,阅读前建议大家支持王道的正版课程。 第一章 计算机系统概述 1.1 操作系统的基本概念&1.2 操作系统发展历程 一、概念 操作系统的概念 操作系统的功能和目…

学习总结11

KMP算法 全称Knuth-Morris-Pratt算法,是一种字符串匹配算法。该算法的目的是在一个文本串S内查找一个模式串P的出现位置。 KMP算法的核心思想是利用模式串自身的特性来避免不必要的字符比较。算法通过构建一个部分匹配表(也称为next数组)&a…

概率在AI中的应用

更多AI技术入门知识与工具使用请看下面链接: https://student-api.iyincaishijiao.com/t/iNSVmUE8/

VUE学习——表单的输入绑定

使用【v-model】。 输入框 <template><h1>表单输入绑定</h1><input type"text" v-model"message"><p>输入的值&#xff1a;{{ message }}</p> </template> <script>export default{data(){return{messa…

快速的搭建一个临时的 Linux 系统instantbox

centos 安装 docker-CSDN博客 首先要有docker && docker-compose mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) docker-compose up -d instantbox: instantbox 可以让你快速的搭…