2011-10-30 43 views
1

我已經給出了一個在java中實現圖的任務。它最終將用於測試搜索方法(廣度優先,深度優先和迭代深化)。這三個類需要實現三個相應的接口:在Java中實現圖

public interface Node { 
    public Node createNode(String name, int ID, float weight); 
    public Node[] getNeighbours(); 
    public Edge[] getEdges(); 
    public void addEdge(Edge e); 
    public void removeEdge(Edge e); 
    public String getName(); 
    public int getID(); 
    public float getWeight(); 
    public String toString(); 

public interface Edge { 
    public Edge createEdge(String name, int ID, float weight); 
    public Node getStartNode(); 
    public void setStartNode(Node n); 
    public Node getEndNode(); 
    public void setEndNode(Node n); 
    public String getName(); 
    public int getID(); 
    public float getWeight(); 
    public String toString(); 

public interface Graph { 
    public Graph createGraph(String name, int ID, Node[] nodes, Edge[] edges, Node root); 
    public String getName(); 
    public Edge[] getEdges(); 
    public void addEdge(Edge e); 
    public Edge getEdge(String name, int ID); 
    public void removeEdge(Edge e); 
    public Node[] getNodes(); 
    public void addNode(Node n); 
    public Node getNode(String name, int ID); 
    public void removeNode(Node n); 
    public void setRoot(Node n); 
    public Node getRoot(); 
    public boolean isTree();  <= optional! 
    public String toString(); 

主要方法將在圖類中。

我有點困惑,爲什麼有創建方法爲每個類而不是構造函數。

而且任何人都可以建議對我是否應該使用鄰接矩陣或adjancency列表存儲的邊緣?

任何和所有的幫助將不勝感激。

謝謝

+0

我看到這裏有一個密切的投票。也許將您的問題重新命名爲「Java接口中類似奇怪的構造函數的方法」可能會使它更具吸引力。只是一個想法。 –

回答

2

我與你一起質疑在界面中放置創建方法的智慧。在接口中的方法已經被實現作爲實例方法在實現類,通常的方法是這樣,當他們在地方的構造函數中使用,是方法,即靜態工廠方法,它不能出現在接口。

在Java界面中創建方法的唯一原因是如果有人在做克隆,這似乎並不是這裏的情況。當你實現這些接口時,創建方法會調用你的構造函數(你可以自由地以你想要的方式實現),但是這些方法有點愚蠢,因爲作爲實例方法,你需要有現有的對象來調用它們。

至於你的第二個問題,鄰接矩陣,鄰接表或發病列表的選擇完全取決於你。