Есть идеи о хорошем интерфейсе для синглтона с методом 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");
}