Quelle est la différence entre le modèle de conception de la stratégie et le modèle de conception de l’État ? Je traverse plusieurs articles sur le web, mais ne pouvaient pas faire la différence clairement. Quelqu'un peut-il s’il vous plaît expliquer en termes simples ?
Réponses
Trop de publicités?Le modèle de Stratégie est vraiment sur le fait d'avoir une mise en œuvre différente qui accomplit (essentiellement) la même chose, de sorte que la mise en œuvre peut remplacer les autres comme la stratégie exige. Par exemple, vous pourriez avoir différents algorithmes de tri dans un modèle de stratégie. Les appelants à l'objet ne change pas en fonction de la stratégie qui est en cours, mais quelle que soit la stratégie, le but est le même (trier la collection).
L'État du modèle est à propos de faire des choses différentes en fonction de l'état, tout en laissant l'appelant releaved de la charge d'accueillir chaque état possible. Ainsi, par exemple, vous pourriez avoir un getStatus()
méthode qui sera de retour statuts différents en fonction de l'état de l'objet, mais l'appel de la méthode ne doit pas être codé différemment pour tenir compte de chaque état potentiel.
La différence simplement réside dans le fait qu'ils résolvent des problèmes différents:
- L' État tendance a trait à ce que l' etat (ou le type) d'un objet (en) -- il encapsule dépendant de l'état de comportement, alors que
- la Stratégie de tendance a trait à la façon dont un objet effectue une certaine tâche, et il encapsule un algorithme.
Les constructions pour la réalisation de ces différents objectifs sont cependant très proches; les deux modèles sont des exemples de composition de la délégation.
Quelques observations sur leurs avantages:
En utilisant l' État du modèle de l'état-holding (contexte) de la classe est soulagé à partir de la connaissance de ce que l' état ou elle est et de ce que les états ou les types qui sont disponibles. Cela signifie que la classe adhère à l'open-principe de conception fermée (OCP): la classe est fermée pour des changements dans ce que les états/types y sont, mais les états/types sont ouverts à des extensions.
À l'aide de la Stratégie de modèle de l'algorithme à l'aide de (contexte) de la classe est soulagé à partir de la connaissance de la façon d'effectuer une certaine tâche (-- l ' "algorithme"). Ce cas crée également un respect de l'OCP; la classe est fermée pour les changements concernant la façon d'effectuer cette tâche, mais le design est très ouvert à des ajouts d'autres algorithmes pour résoudre cette tâche.
Cela améliore également le contexte de la classe de respect du principe de responsabilité unique (SRP). En outre, l'algorithme devient facilement disponible pour la réutilisation par d'autres classes.
Le Modèle de Stratégie implique le déplacement de la mise en œuvre d'un algorithme à partir d'un hébergement de classe et de le mettre dans une classe à part. Cela signifie que l'hôte de la classe n'a pas besoin de fournir de la mise en œuvre de chaque algorithme lui-même, qui est susceptible de conduire à impur code.
Algorithmes de tri sont généralement utilisés comme un exemple, comme ils font tous le même genre de chose (en quelque sorte). Si chacune des différentes algorithme de tri est mis dans sa propre classe, alors le client peut facilement choisir l'algorithme à utiliser et le modèle fournit un moyen facile d'y accéder.
L'État de Modèle consiste à modifier le comportement d'un objet lorsque l'état de l'objet change. Cela signifie que l'hôte de la classe n'a pas de fournir à la mise en œuvre de comportement pour tous les différents états dans lesquels il peut être dans. L'hôte de la classe habituellement encapsule une classe qui fournit les fonctionnalités nécessaires dans un état donné, et des commutateurs d'une classe différente lorsque l'état change.
La stratégie représente des objets qui "font" quelque chose, avec les mêmes résultats de début et de fin, mais en interne en utilisant différentes méthodologies. En ce sens, ils sont analogues à la représentation de l'application d'un verbe. Le modèle d'état OTOH utilise des objets qui "sont" quelque chose - l'état d'une opération. Bien qu'ils puissent également représenter des opérations sur ces données, ils sont plus analogues à la représentation d'un nom que d'un verbe et sont adaptés aux machines à états.