L’État est un patron de conception comportemental qui permet à un objet de modifier son comportement lorsque son état interne change.
Ce patron extrait les comportements liés aux états dans des classes séparées et force l’objet original à déléguer les tâches à une instance de ces classes, au lieu de le faire lui-même.
Utilisons le patron de conception état pour des distributeurs automatiques. Pour plus de simplicité, le distributeur ne vendra qu’un seul type de produit et la machine va se limiter à quatre états différents :
articlePrésent (hasItem)
articleAbsent (noItem)
articleDemandé (itemRequested)
possèdeArgent (hasMoney)
Le distributeur disposera de plusieurs actions et encore une fois pour plus de simplicité, il se limitera à quatre :
Choisir l’article (Select the item)
Ajouter l’article (Add the item)
Insérer de l’argent (Insert money)
Donner l’article (Dispense item)
Le patron de conception état devrait être utilisé pour des objets qui peuvent prendre différents états et dont l’état peut être modifié par les demandes qui leur parviennent.
Dans notre exemple, le distributeur peut prendre beaucoup d’états différents et il va constamment passer de l’un à l’autre. Imaginons que notre distributeur est dans l’état articleDemandé. Si l’action « Insérer de l’argent » se produit, la machine entre dans l’état possèdeArgent.
La machine va se comporter différemment pour les mêmes demandes, selon son état actuel. Par exemple, si un utilisateur veut acheter un article, la machine va accepter si elle est dans l’état articlePrésent. Elle va rejeter la demande si elle se trouve dans l’état articleAbsent.
Le code du distributeur n’est pas pollué par cette logique : tout ce qui concerne l’état est écrit dans les implémentations respectives de l’état.