首页 > 其他 > 详细

设计模式——适配器模式

时间:2020-06-05 20:33:36      阅读:66      评论:0      收藏:0      [点我收藏+]

软件公司OA系统需要提供一个加密模块。为了提高开发效率,现需要重用已有的加密算法(恺撒加密,取模加密等)。这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。试使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。

public abstract class EncryptionModule {
	String str;
	int i;
	
	public void encryption(String str) {
		this.str=str;
	}

	public void key(int i) {
		this.i=i;
	}
	
	public abstract void caesarCall();
	public abstract void modCall();
	public abstract void show();
}
public class Caesar {
    //凯撒加密
	public String doCaesarEncrypt(int key,String ps) {
		String es="";
		for(int i=0;i<ps.length();i++) {
			char c=ps.charAt(i);
			if(c>=‘a‘ && c<=‘z‘) {
				c+=key%26;
				if(c>‘z‘)
					c-=26;
				if(c<‘a‘)
					c+=26;
			}
			if(c>=‘A‘ && c<=‘Z‘) {
				c+=key%26;
				if(c>‘Z‘)
					c-=26;
				if(c<‘A‘)
					c+=26;
			}
			es+=c;
		}
		return es;
	}
}
public class Mod {
    //取模加密
	public String doModEncrypt(int key,String ps) {
		String es="";
		for(int i=0;i<ps.length();i++) {
			String c=String.valueOf(ps.charAt(i)%key);
			es+=c;
		}
		return es;
	}
}
import java.util.Scanner;
public class Adapter extends EncryptionModule{
	private Caesar caesar;
	private Mod mod;
	public Adapter() {
		caesar=new Caesar();
		mod=new Mod();
	}
	
	public void caesarCall() {
		System.out.println("调用凯撒加密");
		String s1=caesar.doCaesarEncrypt(i, str);
		System.out.println("凯撒加密的结果为:"+s1);
	}
	
	public void modCall() {
		System.out.println("调用取模加密");
		String s2=mod.doModEncrypt(i, str);
		System.out.println("取模加密的结果为:"+s2);
	}
	
	public void show() {
		EncryptionModule en=new Adapter();
		
		System.out.println("---加密方式有凯撒加密和取模加密---");
		
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入要加密的明文:");
		String str1=sc.nextLine();
		en.encryption(str1);
		
		System.out.println("请输入要选择的加密方式:");
		String str2=sc.nextLine();
		
		if(str2.equalsIgnoreCase("凯撒加密")) {
			System.out.println("请输入密钥:");
			int i=sc.nextInt();
			en.key(i);
			en.caesarCall();
			}
		if(str2.equalsIgnoreCase("取模加密")) {
			System.out.println("请输入密钥:");
			int i=sc.nextInt();
			en.key(i);
			en.modCall();
			}
		
		sc.close();
	}	
}
public class Client {
	public static void main(String[] args) {
		EncryptionModule en=new Adapter();
		en.show();
	}
}

渺小的我,有大大的梦。

设计模式——适配器模式

原文:https://www.cnblogs.com/xuhuan0/p/13051642.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!