实际上,我使用Jung 库来构建我的超图。
我只想在我的应用程序中使用一个超图实例,这样我就无法访问它并从我的应用程序中的任何类修改它(添加顶点、添加 hyperEdge 等)。
有可能的 ?
我尝试使用单例模式,但据我在这个问题中所读到的,这不是一个好的选择。
这个答案非常好在此处输入链接描述,我可能更喜欢接口和实现,但您仍然可以使用单例,例如:
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 测试。对于大型应用程序,我会考虑使用控制反转,但如果您不熟悉小型应用程序,这将是矫枉过正。