gpt4 book ai didi

Java Singleton - IsEnabled?

转载 作者:行者123 更新时间:2023-11-29 03:54:52 26 4
gpt4 key购买 nike

对于使用 isEnabled 方法的单例的良好接口(interface)有什么想法吗?

例如,我有一个 UDPClient 并且只想创建一次套接字,所以我将其设置为单例。如果配置要求启用该应用程序,我希望该应用程序继续运行,但它不能。

我能否比此客户端代码和由此产生的单例实现做得更好? (如果我搞砸了单例,请纠正我)。如果它有任何不同,将在网络应用程序中使用。

public class UDPConnectionManager {
private static final UDPConnectionManager INSTANCE = new UDPConnectionManager();
private UDPClient udp = null;

private UDPConnectionManager() {
try {
InitialContext ic = new InitialContext();

String udpHost = (String) ic.lookup("java:comp/env/udpHost");
Integer udpPort = (Integer) ic.lookup("java:comp/env/udpPort");
Boolean udpEnabled = (Boolean) ic.lookup("java:comp/env/udpEnabled");

if (udpEnabled) {
udp = new UDPClient(udpHost, udpPort);
}
} catch (Exception e) {
log.error("UDP Connection Manager: error while setting up UDP Manager.", e);
}
}

public static UDPConnectionManager instance() {
return INSTANCE;
}

public UDPClient getUDPClient() {
return udp;
}

public Boolean isEnabled() {
return (udp != null);
}
}

客户:

UDPClient udpCM = UDPConnectionManager.instance();
if (udpCM.isEnabled()) {
UDPClient udpClient = udpcCM.getUDPClient();
udpClient.send("test");
}

最佳答案

如果您希望它是一种即发即忘的东西,即使它不可用,那么您可以减轻客户端的负担,只需将 send() 单例上的方法。

通过这样做,您可以让单例进行检查,如果为空则不发送。

public class UDPConnectionManager {
private UDPConnectionManager() { ... }
public static UDPConnectionManager instance() { ... }

public void send(String message) {
if(udp != null) {
udp.send(message);
}
}
}

Don't make the client do anything the module could do (PDF,第 27 页)

关于Java Singleton - IsEnabled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918214/

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