zoukankan      html  css  js  c++  java
  • 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);
    	}
    }
    
    
  • 相关阅读:
    一个很low的登录界面
    python 中的反射
    【Java】SpringMVC中URL传递参数-ant风格
    【springMVC】用maven构建第一个springMVC程序
    【Mybatis】mybatis登录实例
    【Mybatis】Mybatis简单使用
    【Java】Quartz的简单使用
    【Java】腾讯云发送短信验证码-Struts2
    【Java】web项目中发送邮件验证码-Struts2
    Bootstrap-fileinput文件上传组件
  • 原文地址:https://www.cnblogs.com/qichunlin/p/8503827.html
Copyright © 2011-2022 走看看