2009-11-27 4 views
0

Je vous écris le programme suivant et je pense à une bonne conception pour en C++Classe conception Problème

Problème:
Je suis en train d'écrire une bibliothèque graphique. Il y a Graph < E> classe. Les différents algorithmes de graphe ont différents types d'informations stockées sur les bords (Potentiels, Coût, couleur, valeurs de flux, capacités, etc.) Pour chaque algorithme, une classe EdgeClass différente est transmise en tant qu'argument de modèle à la classe Graph .

Maintenant, ce que je veux faire est qu'après chaque étape de l'algorithme, je veux écrire le fichier DOT pour le graphique à utiliser par Graphviz. (De cette façon, je peux générer des graphiques, à des fins d'enseignement). Cependant, les graphiques doivent avoir des bords colorés (et d'autres attributs possibles définis) de différentes manières à chaque étape. Quand et comment le bord doit être coloré (ou d'autres attributs définis), dépend de l'algorithme. La classe EdgeClass ne peut pas stocker d'informations liées au dessin graphique car la fonction de dessin DOT ressemble plus à une fonction de débogage. Cependant, une fois que les attributs du bord sont connus, l'algorithme pour écrire le fichier DOT pour un objet graphique est très générique et peut être placé dans la classe Graph elle-même. Je peux écrire une fonction appelée point() dans la classe graphique < E> qui écrit le DOT pour le graphique. Quel modèle dois-je utiliser qui permet à l'algorithme du graphe (comme le plus court chemin) de définir les attributs des arêtes de sorte que lorsque la fonction point() de la classe graphe est appelée, elle affiche également les informations dans EdgeClass comme les attributs de bord spécifiques à l'algorithme également dans le fichier DOT sans me forcer à stocker ces attributs liés au graphique supplémentaires dans la classe EdgeClass elle-même? Comment puis-je réaliser ce découplage?

Répondre

0

Je recommande le Strategy pattern
Il ressemble à ce dont vous avez besoin.

Aussi, autant que j'ai compris, vous pouvez séparer les données d'installation graphique dans une structure indépendante.
Je pense que cela a aussi du sens: vous pouvez utiliser ces préréglages plus tard pour différents graphiques.

Bonne chance!