Ich möchte in Java eine Klasse für den Umgang mit Graph Datenstrukturen implementieren. Ich habe eine Knoten-Klasse und eine Edge-Klasse. Die Graph-Klasse verwaltet zwei Listen: eine Liste von Knoten und eine Liste von Kanten. Jeder Knoten muss einen eindeutigen Namen haben. Wie schützen ich gegen eine Situation wie folgt aus: Soll ich beim Hinzufügen eines neuen Elements klonen? Wann sollte geklont werden?
Graph g = new Graph();
Node n1 = new Node("#1");
Node n2 = new Node("#2");
Edge e1 = new Edge("e#1", "#1", "#2");
// Each node is added like a reference
g.addNode(n1);
g.addNode(n2);
g.addEdge(e1);
// This will break the internal integrity of the graph
n1.setName("#3");
g.getNode("#2").setName("#4");
Ich glaube, sollte ich die Knoten klonen und die Kanten, wenn sie zu dem Graphen hinzugefügt und eine NodeEnvelope Klasse zurückgeben, die das Diagramm strukturelle Integrität beibehalten wird . Ist dies der richtige Weg, oder ist das Design von Anfang an gebrochen?
Ich habe die Knotenklasse intern gemacht und exponiert sie über eine Schnittstelle. Jede Änderung an einem Knotenobjekt aktualisiert auch die Graphenstruktur. Sie können den Quellcode auf meinem Blog sehen: http://dev.spartancoder.com/?q=graph-handling-class-project-graph-studio –