État (patron de conception)
Le patron état est un patron de conception (design pattern en anglais, ou encore modèle de conception), de la famille des patrons comportementaux. Il s'agit de l'un des vingt-trois patrons de l'ouvrage du « Gang of Four » Design Patterns – Elements of Reusable Object-Oriented Software[1].
Il est utilisé lorsqu'il est souhaité de pouvoir changer le comportement d'un objet quand son état change, sans pour autant en changer l'instance. Ce patron s'inspire du modèle des automates à états.
Principe général
Le patron Ă©tat propose deux classes principales :
- la classe État, qui définit l'abstraction des comportements du patron
- la classe Contexte, qui s'occupe de l'interfaçage du patron avec le reste de son contexte (l'application).
La classe État permet via ses spécialisations de créer et gérer dynamiquement les comportements dont l'application aura besoin. La classe Contexte qui permet éventuellement à l'application de choisir le comportement à mettre en œuvre et surtout d'orchestrer l'exécution des comportements. Il est à noter que la classe Contexte n'a pas l'exclusivité du choix de comportements. Il est en effet possible d'automatiser le changement d'état à la fin de l'exécution de l'état actif. Cela permet le développement d'automates à états à développement rapide (la spécialisation permettant de récupérer le comportement d'un état parent en lui ajoutant le service qui lui manquait). À grande échelle un automate à état peut résoudre des problèmes très complexes ce qui les hisse au rang d'intelligences artificielles simples, notamment très utilisés dans les jeux vidéo (stratégie, cartes, plateaux, ...) et sont un bon compromis entre la formule mathématique et les réseaux de neurones pour bon nombre d'applications industrielles.
La classe Contexte garde un lien vers une classe abstraite État. Chaque comportement est une spécialisation de cet État. Lorsque l'instance de la classe État change, le comportement du patron change. Ce patron permet donc à la classe Contexte de changer de comportement dynamiquement sans changer ni d'instance ni d'interface.
Notes et références
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (trad. Jean-Marie Lasvergères), Design Patterns - Catalogue de modèles de conceptions réutilisables, France, Vuibert, , 490 p. [détail des éditions] (ISBN 2-71178-644-7)