解决的问题:给图的所有节点赋予一个优先级(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