解決的問題:給圖的所有節點賦予一個優先級(int值)。有一個帶有屬性Graph的DAG類(來自JGraphT庫的類型爲DirectedGraph)。此外,必須有不同的算法來分配優先級,並且必須能夠在未修改現有代碼的情況下添加新的算法。 首先創建DAG,然後用戶可以選擇使用哪種算法(在GUI中使用組合框)。用戶必須有可能隨時更改算法。圖節點優先級設計模式
方法1: 爲算法開發一個接口(算法),並使所有算法實現該接口。 在DAG類中,添加一個新的屬性:
Algorithm myAlgo;
每次用戶在GUI上選擇不同的算法,實例化算法:
myAlgo = new AlgorithmNumberX;
方法2: 獨立地寫優先任務(不作爲DAG的屬性),請使用靜態方法來優先化DAG的節點,方法是將DAG作爲參數發送並返回修改的DAG。
每種方法都有哪些優點?
該算法不是圖的固有部分,所以我不建議將它作爲字段存儲。但我不確定爲什麼你提出了第二種方法的「靜態」方法。爲什麼不是'interface Algorithm {void workOn(Graph g); }'? (順便說一句:優先級是直接存儲在DAG(或其節點)中,還是通過外部數據結構(如「Map」)?) –
Marco13
優先級直接存儲在DAG的節點中。當然,我需要創建一個接口,所以以後可以添加多個算法。但關鍵是我不確定算法是否應該是自己圖的屬性,還是獨立的問題。 – capovawi