Проблема дизайна класса - PullRequest
0 голосов
/ 27 ноября 2009

Я пишу следующую программу и думаю о хорошем дизайне для нее на C ++

Проблема:
Я пишу библиотеку графов. Есть класс Graph .

Разные алгоритмы графа содержат разные типы информации, хранимой по краям (потенциалы, стоимость, цвет, значения потока, емкости и т. Д.) Для каждого алгоритма существует отдельный класс EdgeClass, который передается в качестве аргумента шаблона в класс Graph.

Теперь я хочу, чтобы после каждого шага алгоритма я хотел выписать DOT-файл для графика, который будет использоваться Graphviz. (Таким образом, я могу генерировать графики для учебных целей). Тем не менее, графики должны иметь цветные края (и другие возможные атрибуты установлены) по-разному на каждом этапе. Когда и как должен быть окрашен край (или установлены другие атрибуты), зависит от алгоритма.

EdgeClass не может хранить какую-либо информацию, относящуюся к рисованию графика, поскольку средство рисования DOT больше похоже на средство отладки. Однако, когда атрибуты ребра известны, алгоритм записи файла DOT для графического объекта становится очень общим и может быть помещен в сам класс Graph. Я могу написать функцию с именем dot () в классе Graph , которая записывает DOT для графика.

Какой шаблон проектирования следует использовать, который позволяет алгоритму графа (например, кратчайшему пути) устанавливать атрибуты ребер, чтобы при вызове функции dot () для класса графа отображалась информация внутри EdgeClass, а также специфичные для алгоритма атрибуты ребер также в файле DOT, не заставляя меня хранить эти дополнительные атрибуты, связанные с графом, в самом EdgeClass? Как я могу добиться этой развязки?

1 Ответ

0 голосов
/ 27 ноября 2009

Я рекомендую Шаблон стратегии
Похоже, что вам нужно.

Также, насколько я понял, вы можете разделить данные графической настройки на независимую структуру.
Я думаю, это также имеет смысл: вы можете использовать эти пресеты позже для разных графиков.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...