0

Gang of Four résume la différence entre méthode Modèle et stratégie comme suit:Utilisation de la méthode modèle et stratégie ensemble

méthodes de modèle utiliser l'héritage pour modifier une partie d'un algorithme. Les stratégies utilisent la délégation pour faire varier l'algorithme entier.

Quels sont les scénarios où combinant deux modèles seraient justifiés et comment leur relation ressemblerait?

Un exemple trivial impliquerait de déléguer à Strategy dans les méthodes hook d'une méthode Template, cependant, je ne peux pas penser à une bonne justification pour une telle conception. De plus, au lieu de déléguer à la sous-classe, il est possible de déléguer directement à la stratégie. Mais alors, sans héritage, nous ne pouvons pas du tout parler de Template Method.

+1

Je pense que cette question est trop large pour avoir une réponse correcte ou incorrecte. – jaco0646

+0

Il y a beaucoup de questions sur les motifs de conception sur Stack. La plupart d'entre eux posent des questions sur les différences et les scénarios dans lesquels il faut choisir entre un certain nombre de modèles. Je demande un exemple où ils peuvent être combinés ensemble. Je pense que c'est une demande assez précise. – Siegmeyer

+0

Vous mentionnez que ce serait un exemple trivial serait de déléguer à la stratégie dans les méthodes de crochet d'une méthode de modèle et ma réponse serait ce qui ne va pas avec cela. En ce qui concerne la justification de la combinaison, l'utilisation correcte des modèles dépend du contexte dans lequel ils sont utilisés. Comme il n'y a pas de contexte dans la question une réponse serait hypothétique: hypothétiquement, je ne vois rien de mal à combiner les deux modèles ensemble –

Répondre

2

Je pense qu'il est parfaitement possible de combiner les deux modèles.

Vous utilisez le modèle Stratégie lorsque vous souhaitez modifier un comportement au moment de l'exécution, en modifiant simplement l'instance de la stratégie.

enter image description here

à savoir, vous pouvez modifier le comportement des instances de « contexte » en attribuant « stratégie » à une classe de stratégie concrète différente. Il fournit la même fonctionnalité que d'avoir un champ que vous pouvez modifier et faire une chaîne de if/elses ou un commutateur basé sur le contenu de ce champ. Le modèle de stratégie est simplement une façon plus sophistiquée de faire du conditionnel. L'avantage d'utiliser la stratégie sur une condition codée en dur est que vous pouvez mettre plus de conditions en ajoutant de nouvelles classes, sans avoir à modifier les existantes (le "O" dans le principe "SOLIDE"). D'autre part, la méthode de modèle définit un algorithme qui a des «crochets» laissés ouverts, qui doivent être remplacés par une classe concrète.

enter image description here

Les deux modèles sont préoccupés par un algorithme par deux points de vue différents: stratégie sur la capacité d'échange d'un algorithme à l'exécution et la méthode de modèle à propos de flexibiliser la structure d'un algorithme. Je ne vois pas pourquoi vous ne pouvez pas combiner les deux. Pour moi, il est parfaitement possible d'avoir une stratégie définie comme une méthode de modèle.

+0

Je n'ai pas pensé à utiliser la stratégie qui est une méthode de modèle. Cela a vraiment du sens. J'ai été accroché à l'idée de les combiner mécaniquement je suppose. – Siegmeyer