外观模式实现功能的封装

本文介绍了如何使用外观模式为一个文件加密模块设计接口,将读取源文件、加密和保存加密文件的操作封装在独立的类中,以遵循单一职责原则,最终通过EncryptFacade类提供统一的访问入口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

某软件公司欲开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括三个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这三个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这三个操作的业务代码封装在三个不同的类中。

       现使用外观模式设计该文件加密模块。

package com.liyajie.Pattern.FacadePattern;

/**
 * 文件加密
 * @author 李亚杰
 * @date 2024/4/17 8:55
 * @description CipherMachine
 */
public class CipherMachine {
    /**
     *对字符串进行加密
     * @param s 字符串
     * @return 加密字符串
     */
    public String encode(String s){
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (char var1 : chars){
            char var2 = (char) (var1%2+97);
            stringBuilder.append(var2);
        }
        return stringBuilder.toString();
    }


}

package com.liyajie.Pattern.FacadePattern;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 文件读取
 * @author 李亚杰
 * @date 2024/4/17 8:35
 * @description FileReader
 */
public class FileReader {
    /**
     * 读取文件内容
     * @param filePath 文件路径
     * @return 字符串
     * @throws IOException
     */
    public String readFile(String filePath) throws IOException {
        File file= new File(filePath);
        FileInputStream fileInputStream = new FileInputStream(file);
        StringBuilder stringBuilder = new StringBuilder();
        int ch = fileInputStream.read();
        while (ch!=-1){
            stringBuilder.append((char) ch);
            ch = fileInputStream.read();
        }
        return stringBuilder.toString();
    }


}
package com.liyajie.Pattern.FacadePattern;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 文件写出
 * @author 李亚杰
 * @date 2024/4/17 9:01
 * @description FileWriter
 */
public class FileWriter {
    /**
     * 导出字符串到文件
     * @param s
     * @return 文件路径
     * @throws IOException
     */
    public String writeFile(String s) throws IOException {
        String path = "src/main/resources/FacadePattern/"+System.currentTimeMillis()+".txt";
        File file = new File(path);
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        fileOutputStream.write(s.getBytes(StandardCharsets.UTF_8));
        return path;
    }


}

package com.liyajie.Pattern.FacadePattern;

import java.io.IOException;

/**
 * 外观类
 * @author 李亚杰
 * @date 2024/4/17 9:07
 * @description EncryptFacade
 */
public class EncryptFacade {
    private CipherMachine cipherMachine;
    private FileReader fileReader;
    private FileWriter fileWriter;

    public EncryptFacade() {
        cipherMachine = new CipherMachine();
        fileReader = new FileReader();
        fileWriter = new FileWriter();
    }
    public String fileEncode(String path) throws IOException {
        String s = fileReader.readFile(path);
        String encode = cipherMachine.encode(s);
        String encodePath = fileWriter.writeFile(encode);
        return encodePath;
    }
}
package com.liyajie.Pattern.FacadePattern;

import java.io.IOException;

/**
 * 测试
 * @author 李亚杰
 * @date 2024/4/17 9:12
 * @description Clint
 */
public class Clint {
    public static void main(String[] args) throws IOException {
        EncryptFacade encryptFacade = new EncryptFacade();
        String s = encryptFacade.fileEncode("src/main/resources/FacadePattern/test.txt");
        System.out.println(s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

财大彭于晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值