State (Engels, 'toestand') is een ontwerppatroon in de object-georiënteerde softwareontwikkeling. Het hoort bij de gedragspatronen (Engels: Behavioral Patterns) en wordt gebruikt om verschillende toestanden van een object op een nette manier in te kapselen. Het patroon is een van de oorspronkelijke patronen van de Gang of Four (de vier auteurs van het boek Design Patterns: Elements of Reusable Object-Oriented Software, dat ontwerppatronen introduceerde in object-georiënteerd programmeren).

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 anders reageren op verzoeken, zodat we gedrag verkrijgen dat kan afhangen van de interne toestand van een object zonder allerlei globale variabelen en een batterij if-statements.

De afbeelding rechts geeft een wat abstracte UML-weergave van het patroon. Concreet zou men 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) zal verschillend gedrag noodzakelijk zijn. Het State-ontwerppatroon is doorgaans beter leesbaar dan een meer imperatieve implementatie, en nieuwe toestanden zijn indien nodig relatief makkelijk toe te voegen zonder dat men overal in de code extra if-statements hoeft toe te voegen.

Ontwerppatroon