Java синглтон - IsEnabled? - PullRequest
       1

Java синглтон - IsEnabled?

1 голос
/ 03 августа 2011

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

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Если вы ожидаете, что это будет что-то вроде «запусти и забудь, даже если это недоступно», то вы могли бы облегчить нагрузку на клиента и просто поставить метод send()синглтон.

Делая это, вы можете заставить синглтон выполнять проверку, а не отправлять ее, если она пуста.сделать все, что мог сделать модуль (PDF, стр. 27)

1 голос
/ 03 августа 2011

В этом нет ничего плохого, так как это само по себе, но если все ваши варианты использования выглядят так, как описано выше, то я просто поместил бы метод send () в синглтоне и решил, будет ли он включен или нет. Если вы хотите знать, прошло ли оно нормально, вы можете вернуть его логическое значение. Или, если вы не хотите использовать этот метод в диспетчере одноэлементных соединений, вы можете написать другой класс, через который он работает, и вместо этого выгрузить его.

Конечно, если вы планируете использовать метод isEnabled () для принятия решения о других действиях, тогда вам, возможно, понадобится, чтобы он был доступен на синглтоне, и в моей книге нет ничего плохого в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...