2018.3.4 适配器模式之加密算法--对象适配器

某系统需要提供一个加密模块,将用户信息加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高效率,现需要重用已有的加密算法,这些加密算法封装在一些由第三方提供的类中,有些甚至没有源代码。要求不修改现有类的基础上重用第三方加密算法。现使用对象适配器模式完成该系统设计。

package com.lanqiao.dmeo6;

/**
 * Caesar类是一个由第三方提供的数据加密类,该类为final类,无法继承
 * 因此本实例只能对象适配器模式
 * 
 * @author QqiDchunGlin
 *
 */
public final class Caesar {
    public String doEncrypt(int key, String psd) {
        String str = "";
        
        for (int i = 0; i < psd.length(); i++) {
            char c = psd.charAt(i);
            
            if(c>='a' && c<='z') {
                c += key % 26;
                
                if(c<'a') {
                    c +=26;
                }
                
                if(c>'z') {
                    c -= 26;
                }
                
            }
            
            if(c>='A' && c<='Z') {
                c+= key %26;
                
                if(c<'A') {
                    c += 26;
                }
                    if(c>'Z') {
                        c -= 26;
                    }
            }
            
            str += c;
        }
        return str;
    }

}
package com.lanqiao.dmeo6;

public class CipherAdapter extends DataOperator{
    private Caesar ciphter;
    public CipherAdapter() {
        ciphter = new Caesar();
    }
    
    //有参构造方法
    public CipherAdapter(Caesar ciphter) {
        super();
        this.ciphter = ciphter;
    }
    
    public String doEncrypt(int key,String psd) {
        String str = ciphter.doEncrypt(key,psd);
        return str;
    }
}
package com.lanqiao.dmeo6;

public abstract class DataOperator {
    private String passWord;//密码

    public String getPassword() {
        return passWord;
    }

    public void setPassword(String psd) {
        this.passWord = psd;
    }
    
    
    //加密算法
    public abstract String doEncrypt(int key,String psd);
    
}
package com.lanqiao.dmeo6;

/**
 * @author QqiDchunGlin
 *
 */
public class Test {
    public static void main(String[] args) {
        DataOperator dao = new CipherAdapter();
        
        dao.setPassword("whoami");
        String psd = dao.getPassword();
        String str = dao.doEncrypt(6, psd);
        System.out.println("明文为:"+psd);
        System.out.println("密文为:"+str);
    }
}

转载于:https://www.cnblogs.com/qichunlin/p/8503827.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值