设计模式-适配器模式的应用

适配器模式的应用

加密适配器
某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。
现使用适配器模式来模拟实现加密适配器的设计。用JAVA语言实现该模式。绘制该模式的UML图。

【模式UML图】
适配器模式
【模式代码】
// DataOperator.java:

package sdp.sy_6.adapterpattern;

public abstract class DataOperator {
	private String password;

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	public abstract String doEncrypt(int key, String ps);
}

// CipherAdapter.java:

package sdp.sy_6.adapterpattern;

public class CipherAdapter extends DataOperator{
	private Caesar cipher;
	
	public CipherAdapter() {
		cipher = new Caesar();
	}
	
	public String doEncrypt(int key, String ps) {
		return cipher.doEncrypt(key, ps);
	}
}

// NewCipherAdapter.java:

package sdp.sy_6.adapterpattern;

public class NewCipherAdapter extends DataOperator{
	private NewCipher cipher;
	
	public NewCipherAdapter() {
		cipher = new NewCipher();
	}
	
	public String doEncrypt(int key, String ps) {
		return cipher.doEncrypt(key, ps);
	}
}

// Caesar.java:

package sdp.sy_6.adapterpattern;

public class Caesar {
	public String doEncrypt(int key, String ps) {
		return ps+key;
	}
}

// NewCipher.java:

package sdp.sy_6.adapterpattern;

public class NewCipher {
	public String doEncrypt(int key, String ps) {
		return ps+2*key;
	}
}

// EncryptModuleMain.java:

package sdp.sy_6.adapterpattern;

public class EncryptModuleMain {


	public static void main(String[] args) {
		
		DataOperator cipherAdapter = new CipherAdapter();
		cipherAdapter.setPassword("xushicheng");
		String pwd = cipherAdapter.getPassword();
		System.out.println("old doEncrypt:"+cipherAdapter.doEncrypt(6, pwd));
		
		DataOperator newCipherAdapter = new NewCipherAdapter();
		newCipherAdapter.setPassword("xushicheng");
		pwd = newCipherAdapter.getPassword();
		System.out.println("new doEncrypt:"+newCipherAdapter.doEncrypt(6, pwd));

	}

}

【运行截图】
运行结果

适配器模式主要适用于以下情况:

  • 当系统想要使用现有的类,但是现有的类的接口不符合系统的需要时。
  • 当需要通过创建一个可复用的类,使用本来的接口不相容并且无关的类结合在一起工作时。
  • 在设计需要改变多个子类接口,在作用相同但名称不同的类或方法之间进行适配。

猜你喜欢

转载自blog.csdn.net/xu_benjamin/article/details/89074239