Java Singleton-IsEnabled?
对于使用isEnabled方法的singleton,有什么好的接口想法吗 例如,我有一个UDPClient,只想创建一次套接字,所以我将它设置为单例。如果配置显示要启用,我希望应用程序继续,但它不能 我能比这个客户机代码和由此产生的单例实现做得更好吗?(如果我搞砸了单身汉,请纠正我)。如果这有什么不同,它将在web应用程序中使用Java Singleton-IsEnabled?,java,design-patterns,Java,Design Patterns,对于使用isEnabled方法的singleton,有什么好的接口想法吗 例如,我有一个UDPClient,只想创建一次套接字,所以我将它设置为单例。如果配置显示要启用,我希望应用程序继续,但它不能 我能比这个客户机代码和由此产生的单例实现做得更好吗?(如果我搞砸了单身汉,请纠正我)。如果这有什么不同,它将在web应用程序中使用 public class UDPConnectionManager { private static final UDPConnectionManager IN
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()
方法放在singleton上
通过这样做,您可以让singleton进行检查,如果为null,则不发送它
public class UDPConnectionManager {
private UDPConnectionManager() { ... }
public static UDPConnectionManager instance() { ... }
public void send(String message) {
if(udp != null) {
udp.send(message);
}
}
}
(PDF,第27页)如果您希望它有点像火,即使它不可用也会忘记,那么您可以减轻客户端的负担,只需将
send()
方法放在singleton上
通过这样做,您可以让singleton进行检查,如果为null,则不发送它
public class UDPConnectionManager {
private UDPConnectionManager() { ... }
public static UDPConnectionManager instance() { ... }
public void send(String message) {
if(udp != null) {
udp.send(message);
}
}
}
(PDF,第27页)它本身并没有什么问题,但如果您的所有用例都与上面的一样,那么我只需在singleton上放置一个send()方法,让它决定是否启用它。如果你想知道它是否正常,你可以让它返回一个布尔值。或者,如果您不想在singleton连接管理器上使用该方法,您可以编写另一个它可以使用的类,并将其卸载到该类中
当然,如果您计划使用isEnabled()方法来决定其他操作,那么您可能需要它在singleton上可用,在我的书中没有任何问题。它本身没有问题,但是如果您所有的用例都像上面所示,那么我只需要使用send()方法,并使其决定是否启用。如果你想知道它是否正常,你可以让它返回一个布尔值。或者,如果您不想在singleton连接管理器上使用该方法,您可以编写另一个它可以使用的类,并将其卸载到该类中
当然,如果您计划使用isEnabled()方法来决定其他操作,那么您可能需要它在singleton上可用,在我的书中没有任何问题。我喜欢这个,所以我投了更高的票。问题是我没有提到还有5种其他方法,类似于send,我需要对其进行if-notnull测试。5种方法还不错。我得整晚考虑这个问题。谢谢你的洞察力。我喜欢这个,所以我投了更高的票。问题是我没有提到还有5种其他方法,类似于send,我需要对其进行if-notnull测试。5种方法还不错。我得整晚考虑这个问题。谢谢你的洞察力。