gpt4 book ai didi

java - 策略模式客户端实现问题

转载 作者:行者123 更新时间:2023-12-01 20:20:07 25 4
gpt4 key购买 nike

目前我有一个策略模式:

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 "";
}
}

我希望客户端成为一个密码学家类,它将创建上下文(我也有一个解密器,与加密器相同),但我正在努力制作这些方法。

public class Cryptographer {

}

public class Main {
public static void main(String[] args) {
Cryptographer cryptographer = new Cryptographer();
cryptographer.setCryptographer(new Encrypter());
cryptographer.setAlgorithm(new UnicodeEncryptionAlgorithm());
}
}

我尝试使密码学家成为一个接口(interface)并通过加密器实现这些方法,但没有成功。有什么建议吗?

最佳答案

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);
}
}

关于java - 策略模式客户端实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com