设计模式——适配器模式

Posted xuhuan0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——适配器模式相关的知识,希望对你有一定的参考价值。

软件公司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();
	}
}

渺小的我,有大大的梦。

以上是关于设计模式——适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

多选模式列表视图行在删除后保持选中状态

Java设计模式之适配器模式

设计模式之适配器模式

设计模式之适配器模式

php设计模式之适配器模式实例代码

.NET(C#) 设计模式 适配器模式