对于使用isEnabled方法的单例,有什么好的接口的想法吗?
例如,我有一个UDPClient,并且只想创建一次套接字,所以我将其设置为单例。如果配置说要启用它,我希望应用程序继续运行,但它不能。
我能比这个客户端代码和由此产生的单例实现做得更好吗?(如果我搞砸了单例,请纠正我)。这将在web应用程序中使用,如果它有任何不同的话。
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");
}发布于 2011-08-03 04:36:37
如果您希望它是一种“一发即忘”甚至是不可用的东西,那么您可以减轻客户端的负担,只需将send()方法放在单例上。
通过这样做,您可以让单例执行检查,如果检查为空,则不发送它。
public class UDPConnectionManager {
private UDPConnectionManager() { ... }
public static UDPConnectionManager instance() { ... }
public void send(String message) {
if(udp != null) {
udp.send(message);
}
}
}( ,第27页)
发布于 2011-08-03 04:45:52
它本身的方式没有什么问题,但是如果你所有的用例看起来都像上面那样,那么我只需要在单例上放一个send()方法,并让它决定是否启用它。如果你想知道它是否通过了ok,你可以让它返回一个布尔值。或者,如果您不想在单例连接管理器上使用该方法,您可以编写另一个类,然后将其卸载到单例连接管理器中。
当然,如果您计划使用isEnabled()方法来决定其他操作,那么您可能需要它在单例中可用,这在我的书中没有任何错误。
https://stackoverflow.com/questions/6918214
复制相似问题