有关使用isEnabled方法的单例的良好接口的任何想法吗?
例如,我有一个UDPClient并且只想创建一次Socket,所以我将其设置为单例。我希望应用程序继续,如果配置说启用它,但它不能。
我可以做得比这个客户端代码和生成的单例实现更好吗? (如果我搞砸了单身,请纠正我)。如果有任何不同,这将在网络应用中使用。
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");
}
答案 0 :(得分:3)
如果你希望它有点像火,甚至是不可用的那种东西,那么你可以减轻客户端的负担,只需要放置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页)
答案 1 :(得分:1)
它本身的方式没有任何问题,但如果你的所有用例看起来都像上面那样,那么我只需要在单例上放置一个send()方法,然后判断它是否已启用。如果你想知道它是否通过了ok,你可以让它返回一个布尔值。或者,如果您不想在单例连接管理器上使用该方法,则可以编写另一个可以处理的类,并将其卸载到该类中。
当然,如果您打算使用isEnabled()方法来决定其他操作,那么无论如何您可能需要在单例上使用它,并且在我的书中没有任何问题。