J'ai une question sur deux opérations que vous voyez couramment dans un exemple de diagramme de classes composites.
* GetDescendents
* GetChild (int)questions de conception de modèles composites
Un exemple courant étant des fichiers et répertoires, je vais rester avec ça. Supposons que l'opération qui nous intéresse soit Size, donc le fichier a une taille réelle et Directory a une taille dérivée de l'itération récursive de GetDescendents. Jusqu'ici tout va bien. Ma question concerne l'utilisation de GetDescendents par le client. Dites que vous avez besoin des fichiers dans un répertoire qui sont des images pour une opération donnée. Donc en pratique, vous utilisez une combinaison de GetDescendents et Children pour renvoyer les imagesFiles (selon que le client voulait tous les fichiers image imbriqués ou juste au niveau racine).
Donc la question numéro un est, auriez-vous probablement une méthode GetImageFiles sur le composite, plutôt que de le faire comprendre au client? Et en supposant ainsi, GetDescendents est-il toujours pratique d'exposer aux clients appelants (comme le ImageViewer) en dehors de la composition?
La deuxième question à propos de GetChild (int); est l'int un index de position ordinale pour retourner un seul enfant? Un niveau de profondeur dans GetDescendents? Quel serait un exemple de la façon dont un client utiliserait cette méthode?
Cheers,
Berryl
Exactement. Ma question est-elle * jamais * logique d'exposer des opérations d'enfants à des clients qui ne font pas partie de la composition, ou du moins ont une relation très intime avec elle - c.-à-d., Opérations internes pour produire une opération consommable client comme GetFilesOfType(). – Berryl
@Berryl: cela dépend de ce que votre classe représente. Le "pattern" est juste un détail d'implémentation, l'important est le "concept". –