0

实际上,我使用Jung 库来构建我的超图。

我只想在我的应用程序中使用一个超图实例,这样我就无法访问它并从我的应用程序中的任何类修改它(添加顶点、添加 hyperEdge 等)。

有可能的 ?

我尝试使用单例模式,但据我在这个问题中所读到的,这不是一个好的选择。

4

1 回答 1

0

这个答案非常好在此处输入链接描述,我可能更喜欢接口和实现,但您仍然可以使用单例,例如:

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();
    }
}

因为很难对图表进行 Stub 或 Mock 测试。对于大型应用程序,我会考虑使用控制反转,但如果您不熟悉小型应用程序,这将是矫枉过正。

于 2013-04-26T15:53:11.990 回答