我正在编写以下程序,我正在考虑在C ++中使用进行良好的设计
问题:
我正在写一个图库。有图< E>类。
不同的图算法在边缘上存储了不同类型的信息(潜力,成本,颜色,流量值,容量等)。对于每种算法,都有一个不同的EdgeClass作为模板参数传递给Graph类。
现在我想做的是在算法的每一步之后,我想写出Graphviz使用的图形的DOT文件。 (这样我可以生成图表,用于教学目的)。但是,图形应在每个步骤以不同方式着色(以及设置其他可能的属性)。边缘何时以及如何着色(或其他属性设置)取决于算法。
EdgeClass无法存储任何Graph绘图相关信息,因为DOT绘图工具更像是一个调试工具。但是,一旦边缘的属性已知,用于为图形对象编写DOT文件的算法非常通用,可以放在Graph类本身中。我可以在Graph< E>中编写一个名为dot()的函数。写出图表DOT的类。
我应该使用哪种设计模式允许图算法(如最短路径)设置边的属性,以便在调用图类的dot()函数时,它会显示EdgeClass内的信息以及算法特定的边缘属性也在DOT文件中,而不强迫我在EdgeClass本身中存储这些额外的图形相关属性?我怎样才能实现这种脱钩?
答案 0 :(得分:0)
我推荐Strategy pattern
它看起来像你需要的。
另外,据我所知,您可以将图形设置数据分成独立的结构 我认为,这也是有道理的:您可以稍后将这些预设用于不同的图形。
祝你好运!