73 votes

Quand devrais-je utiliser un motif de conception composite?

Je ne comprends pas quand je devrais utiliser un modèle de conception composite . Quels avantages tirerai-je de ce modèle? J'ai visité le site Web www.dofactory.com, mais cela ne m'indique que la structure du modèle de conception et non les scénarios. J'espère que cela profitera également aux programmeurs comme moi, qui commencent à apprendre les modèles de conception.

86voto

Sisyphus Points 2175

Un Composite est un modèle qui est utile à tout moment vous pouvez avoir besoin de traiter de manière sélective un groupe d'objets qui font partie d'une hiérarchie comme "le même" quand ils sont en fait différents. Généralement, les exemples utilisés parler en termes de traitement des feuilles et les nœuds de la même, mais le modèle peut également être étendue à des listes.

Par exemple, envisager une visite chez le médecin. Quand vous allez à un médecin diverses choses arrivent, vous voyez habituellement une infirmière ou d'un assistant, d'abord, ils prennent votre température, etc. Ensuite, le médecin procède à un examen et fait des diagnostics. Ensuite, le médecin peut faire un traitement, mais, souvent, l'infirmière revient à en finir. Et les différentes activités sont réalisées au cours de la visite. Vous avez des observations, comme le poids et la température. Mais un laboratoire par exemple sera un autre objet, car il nécessite souvent un échantillon, qui peut ensuite être envoyé et exigent d'être enregistré à une date ultérieure.

Nous avons donc un logiciel qui permet d'enregistrer tout cela et il va généralement de créer une sorte de hiérarchie de nœuds comme:

Rencontre:
PreExam
Examen
Traitement

et en vertu de chacun de ces nœuds, vous aurez une variété d'entrées telles que le diagnostic, l'observation, la procédure en laboratoire, de diagnostic, d'injection, etc.

C'est bien beau tout ça, et vous vous retrouvez avec un structurés, bien que très complexe et hiérarchique enregistrement de la rencontre.

Maintenant, supposons que vous avez besoin de générer la facturation. Tout à coup, vous êtes confrontés à une très exigence différente. Votre dossier médical était nécessaire pour créer une image très précise de la rencontre. Dans de facturation si vous n'avez pas de soins de qui a fait quoi, ou dans quel ordre, en fait, vous n'avez pas vraiment attention à ce que l'activité est au-delà d'un code de facturation. Vous souhaitez simplement une liste unique des activités facturables, j'.e codes.

Ce n'est pas seulement les informations incorporées dans un dossier, ce dossier est également très difficile à traverser, car il contient un grand nombre d'objets différents. Il est également variable dans la structure hiérarchique - si vous avez un clou dans la tête, il peut passer par toute sorte de pré-examen, ou examen de cette question et de passer à un traitement. Si vous allez en avoir des points de suture enlevés il y a peut-être pas tout pré de l'examen ou de l'examen. Chaque année physique n'a pas de traitement. etc etc. Très difficile d'énumérer ce genre d'objet graphique.

Un Composite modèle résout tout cela. Vous définissez une interface commune ou de la classe de base pour tous les objets. Appelons cela la "CareEntry". CareEntry a une propriété BillingCode. Maintenant, votre Rencontre peut sembler être un simple conteneur de rien, mais CareEntry des objets à l'intérieur. Votre service de facturation peuvent maintenant simplement énumérer tout à l'intérieur sans avoir à se soucier de savoir si quelque chose est un nœud (PreExam, l'Examen) par rapport à une feuille(poids de la température), ou de ce nœud de l'objet est dans l' (PreExam Examen, etc), ou ce que le type réel de l'objet (laboratoire d'injection, etc). Tout est aussi une CareEntry et traitées de façon uniforme - Vous simplement énumérer tous les CareEntry objets dans une Rencontre et de recueillir chacun qui a une valeur non nulle de la facturation code et vous avez terminé. C'est aussi simple que cela.

33voto

Don Roby Points 24965

Citant des Modèles de Conception,

Utiliser le diagramme Composite lorsque

  • vous voulez représenter la partie-ensemble de hiérarchies d'objets.
  • vous voulez que les clients d'être en mesure d'ignorer la différence entre compositions d'objets et de des objets individuels. Clients traiter tous les objets dans le composite la structure de manière uniforme.

Une utilisation courante est celle qui est utilisée comme un exemple motivant dans le livre, un système d'affichage de graphique de windows qui peuvent contenir d'autres fenêtres et des éléments graphiques tels que des images, du texte. Le matériau composite peut être composé au moment de l'exécution, et le code client peut manipuler tous les éléments sans se soucier de quel type il est, pour les opérations les plus courantes telles que le dessin.

2voto

dantuch Points 5048

Vous le trouverez peut-être indispensable lorsque vous travaillerez avec binary trees ou un autre complex data structures like list of lists of lists - etc ... puis, lorsque chaque élément (classe) implémente une interface, vous pouvez appliquez les mêmes méthodes sur une feuille ou sur tout un groupe d’entre elles - copping, ajout, suppression, déplacement ... peu importe ce que vous avez correctement mis en œuvre. C'est très utile et simple.

2voto

Naseef Ur Rahman Points 447

La réponse devrait être -

Composez des objets dans des arborescences pour représenter des hiérarchies entières. Composite permet aux clients de traiter des objets individuels et des compositions d'objets de manière uniforme.

  • Composition récursive
  • "Les répertoires contiennent des entrées, chacune pouvant être un répertoire."
  • 1-à-plusieurs "a un" haut la "est une" hiérarchie

copié d'un forum.

1voto

Kumar Points 940

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X