Глобальный экземпляр объекта

На самом деле я использую библиотеку jung для построения моего гиперграфа.

Я хочу использовать только один экземпляр гиперграфа во всем своем приложении, чтобы я не мог получить к нему доступ и преобразовать его из любого класса в моем приложении (для добавления вершины, для добавления HyperEdge и т. Д.).

Это возможно ?

Я пытаюсь использовать шаблон singleton, но, насколько я прочитал в этот вопрос это не лучший выбор.


person nawara    schedule 25.04.2013    source источник
comment
Почему синглтон не подходит для этого? Не могли бы вы обновить ссылку?   -  person CodeBlue    schedule 25.04.2013
comment
Дело не в том, что синглтон сам по себе является плохим выбором - просто то, что он представляет. Идея наличия чего-либо доступного для всего вашего приложения означает, что это, по сути, глобальная переменная. Когда что-то идет не так, и вам нужно отлаживать свою программу, теперь вы должны проверить всю свою программу, потому что любой класс мог изменить ваш график. Возможно, вы захотите переосмыслить, действительно ли каждой части вашей программы нужен доступ к вашему графику.   -  person sdasdadas    schedule 08.05.2013


Ответы (1)


Это неплохой ответ. введите здесь описание ссылки, я бы, вероятно, предпочел интерфейс и реализацию, но вы все равно могли бы использовать синглтон Например:

public interface GraphSource {

    public Graph getGraph();
}

public enum DefaultGraph implements GraphSource {

    INSTANCE;

    private Graph<String,String> graph;

    {
        graph = new SparseGraph<String,String>();
    }

    @SuppressWarnings("rawtypes")
    @Override
    public Graph getGraph() {
        return graph;
    }

}

public class MyClass {

    public MyClass(GraphSource source) {
        Graph myGraph = source.getGraph();
    }
}

Но я бы избегал:

public class MyClass {

    GraphSource source = DefaultGraph.INSTANCE;

    public MyClass(GraphSource source ) {
        Graph myGraph = source.getGraph();
    }
}

Как было бы сложно заглушить или смоделировать график для тестирования. Для большого приложения я бы подумал об использовании инверсии управления, но для небольшого приложение, если вы с ним не знакомы.

person GrahamA    schedule 26.04.2013