State (ontwerppatroon)

ontwerppatroon

State (Engels voor toestand) is een ontwerppatroon in de object-georiënteerde softwareontwikkeling. Het wordt gebruikt om verschillende toestanden van een object op een nette manier te programmeren. Het patroon is een van de oorspronkelijke patronen van de vier auteurs van het boek Design Patterns, waarin ontwerppatronen in object-georiënteerd programmeren werden geïntroduceerd.[1]

UML-diagram van het State-patroon.

Het patroon bestaat uit een tweetal klassen: de 'context' en de 'toestand' (state). De eerste handelt verzoeken af en geeft deze door aan de tweede. De verschillende interne toestanden worden geïmplementeerd als subklassen van de state-klasse. Iedere subklasse kan verzoeken op een andere manier afhandelen, zodat het gedrag van de klasse van de interne toestand van een object afhangt zonder allerlei globale variabelen en if-statements.

De afbeelding geeft een wat abstracte UML-weergave van het patroon. Men zou het patroon bijvoorbeeld kunnen gebruiken voor de besturing van een frisdrankautomaat: afhankelijk van de interne toestand van de automaat (wel of geen geld ingeworpen, artikel al dan niet voorradig) reageert de automaat anders op handelingen van de gebruiker. Het State-ontwerppatroon is doorgaans beter leesbaar dan een meer imperatieve implementatie, en nieuwe toestanden zijn indien nodig relatief gemakkelijk toe te voegen zonder dat men overal in de code extra if-statements hoeft toe te voegen.