3

我們,每一個節點從節點基類public Node(INodeFactory nodeFactory) 工廠注入使節點可以使用Get(int id)如果一個工廠總是創建一個新的對象

在稍後的時刻創建其子節點派生的層次結構一些節點需要引用結構中的另一個節點。獲取引用所需的信息可能會在運行時更改,並且在構建節點對象時不一定可用。基本上這種方法簽名看起來是相同的,並且是Get(int id)。這次不應該創建新的對象,而應該返回現有的對象。

我們的第一次嘗試是通過INodeLocator來搜索節點。首先,我們不確定'定位器'是一個好名字,如果我們在這裏錯過了一些模式,可能是存儲庫模式(但只是查找?)。其次,我們注意到方法簽名是相同的。

在創建初始樹之後,我們正在考慮將工廠從「創建」切換到「查找」模式,但由於稍後還需要創建節點,因此這種模式不起作用。

對於「定位器」邏輯,我們正在考慮通過節點搜索(迭代),但也許最好在平面字典中跟蹤它們。但隨後出現的問題是工廠可以添加到字典中,但不管理壽命。節點被刪除時應該發生什麼。

我們如何以適當的方式設計這個問題?

+0

這是不正確的地方爲您的問題切換到softwareengineering.stackexchange.com –

+0

在閱讀https://meta.stackoverflow.com/questions/254570/choosing-between-stack-overflow-and-software-engineering我認爲你可能是對的。我從來沒有在那裏發佈。這個應該刪除嗎? –

+0

我認爲它應該被刪除。即使這是一個很好的問題,並且如果您查看softwareengineering.stackexchange.com,您也沒有關閉選項 –

回答

0

按名稱區分這兩個函數,並將它們添加到您的「工廠」(可能有不同的名稱)。例如。

public interface INodeFactory 
{ 
    // creates a new Node and returns it 
    Node Create(int id); 

    // retrieves an existing node 
    Node Get(int id); 

    // deletes a Node 
    void Delete(int id); 
} 

的實現保持某種字典的內部,與ID爲重點,節點再加上如果它已經被刪除,是值的指示。

我更喜歡將這兩個函數都保存在一個類中,因爲可以在這裏存儲新創建的節點,因此可以輕鬆避免不一致。

相關問題