抽象工厂模式-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 {
   
   

    @Override
    public String uploadFile(File file) {
   
   
        log.info("向阿里云OSS上传文件");
        return "/test/" + file.getName();
    }
}

@Slf4j
public class AliyunFileDownloaderImpl implements FileDownloader {
   
   
    @Override
    public 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(

相关推荐

  1. [go] 抽象工厂模式

    2024-02-19 02:02:01       47 阅读
  2. 设计模式 抽象工厂

    2024-02-19 02:02:01       51 阅读
  3. 抽象工厂模式

    2024-02-19 02:02:01       46 阅读
  4. 设计模式抽象工厂

    2024-02-19 02:02:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 02:02:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 02:02:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 02:02:01       82 阅读
  4. Python语言-面向对象

    2024-02-19 02:02:01       91 阅读

热门阅读

  1. 南非公司注册优势 南非公司开户 南非公司年审

    2024-02-19 02:02:01       50 阅读
  2. Spatial Networks for Locations

    2024-02-19 02:02:01       43 阅读
  3. EMS5730 MapReduce program

    2024-02-19 02:02:01       42 阅读
  4. 文档分割和文档词向量化的几种实现方式

    2024-02-19 02:02:01       61 阅读
  5. go-zero/grpc的rpc服务间传递额外数据

    2024-02-19 02:02:01       62 阅读
  6. linux 中date 命令的用法

    2024-02-19 02:02:01       54 阅读
  7. MySQL正则表达式

    2024-02-19 02:02:01       63 阅读
  8. vue3-使用 Vue 的多种方式

    2024-02-19 02:02:01       52 阅读
  9. 2024年2月新加坡-马来西亚游-简记

    2024-02-19 02:02:01       53 阅读
  10. 学习Android的第十二天

    2024-02-19 02:02:01       49 阅读