写点什么

设计模式的艺术 第九章适配器设计模式练习(OA 系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱)加密再存储在数据库,系统已经定义好数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码)

作者:代廉洁
  • 2022 年 9 月 05 日
    浙江
  • 本文字数:868 字

    阅读完需:约 3 分钟

Sunny 软件公司 OA 系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱等)加密后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。试使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。


一、类结构图



抽象目标类:设计为名称为 DataEncryptor 抽象类,包含抽象方法 encryptData(String str);

适配器类:设计为抽象目标类 DataEncryptor 的子类,设计为名称为 DataEncryptorAdapter 的具体类,持有一个适配者类 Encryptor 的引用,实现抽象方法 encryptData(String str);

适配者类:设计为名称为 Encryptor 的具体类,实现具体方法 encrypt(String str)。


二、典型实现代码

抽象数据加密类:抽象目标类
// 抽象数据加密类:抽象目标类public abstract class DataEncryptor {    public abstract String encryptData(String str);}
复制代码


数据加密适配器类:具体适配器类
// 数据加密适配器类:具体适配器类public class DataEncryptorAdapter extends DataEncryptor{    private Encryptor encryptor;
public DataEncryptorAdapter() { this.encryptor = new Encryptor(); }
@Override public String encryptData(String str) { return encryptor.encrypt(str); }}
复制代码


第三方数据加密类:具体适配者类
// 第三方数据加密类:具体适配者类public class Encryptor {    public String encrypt(String str) {        System.out.println("第三方加密算法加密");        return "ceqoermrnpioqwilw";    }}
复制代码


客户端代码:
public class Client {    public static void main(String[] args) {        DataEncryptor dataEncryptorAdapter;        dataEncryptorAdapter = new DataEncryptorAdapter();        String encryptStr = dataEncryptorAdapter.encryptData("sourceData");        System.out.println(encryptStr);    }}
复制代码


编译并运行程序,输出以下结果:
第三方加密算法加密ceqoermrnpioqwilw
复制代码


发布于: 刚刚阅读数: 5
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第九章适配器设计模式练习(OA系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱)加密再存储在数据库,系统已经定义好数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码)_设计模式的艺术_代廉洁_InfoQ写作社区