目前,我有一种策略模式:
public interface EncryptionAlgorithm {
String encrypt(String text);
}
public class Encrypter {
private EncryptionAlgorithm encryptionAlgorithm;
String encrypt(String text){
return encryptionAlgorithm.encrypt(text);
}
public void setEncryptionAlgorithm(EncryptionAlgorithm encryptionAlgorithm) {
this.encryptionAlgorithm = encryptionAlgorithm;
}
}
public class UnicodeEncryptionAlgorithm implements EncryptionAlgorithm {
@Override
public String encrypt(String text) {
return "";
}
}
我希望Client成为将创建上下文的Cryptographer类(我也有一个解密器,与加密器相同),但是我在努力创建这些方法上很挣扎。
public class Cryptographer {
}
public class Main {
public static void main(String[] args) {
Cryptographer cryptographer = new Cryptographer();
cryptographer.setCryptographer(new Encrypter());
cryptographer.setAlgorithm(new UnicodeEncryptionAlgorithm());
}
}
我试图使Cryptographer成为接口并由加密器实现方法,但没有成功。有什么建议吗?
答案 0 :(得分:0)
EncryptionAlgorithm
是您的策略。所以这里的代码与您的代码相同。
public interface EncryptionAlgorithm {
String encrypt(String text);
}
UnicodeEncryptionAlgorithm
是具体策略,这里是相同的代码。具体策略可以有n种。
public class UnicodeEncryptionAlgorithm implements EncryptionAlgorithm {
@Override
public String encrypt(String text) {
return "";
}
}
根据您的要求,Cryptographer
应该是上下文。我使CryptographerContext
变得更有意义。如果需要,可以更改名称。
public class CryptographerContext {
private EncryptionAlgorithm encAlgo;
public void setEncryptionStrategy(EncryptionAlgorithm encAlgo) {
this.encAlgo = encAlgo;
}
public String getEncryptedContents(String text) {
return encAlgo.encrypt(text);
}
}
在上述情况下,您必须使用抽象策略。
我在主要课程下面提供测试。如果有很多策略,则必须使用context.setStrategy(concrete impl class)
为您的需求设置最合适的策略。
public class Main {
public static void main(String[] args) {
CryptographerContext cryptographer = new CryptographerContext();
cryptographer.setEncryptionStrategy(new UnicodeEncryptionAlgorithm());
String encText = cryptographer.getEncryptedContents("some text");
System.out.println("Encrypted text: "+encText);
}
}