Treci la conținutul principal

Ce este

Șablonul Stare (State) oferă unui obiect un comportament diferit în stări diferite, transformând fiecare stare într-o clasă proprie. Obiectul își păstrează starea curentă și îi delegă ei lucrul; trecerea la o altă stare înseamnă înlocuirea valorii.

El înlocuiește lanțul if/elif tot mai lung pe un câmp de stare, repetat în jumătate din metode, cu câte o clasă mică pentru fiecare stare.


Exemplu: viața unei comenzi

O comandă este nouă, apoi plătită, apoi expediată. Fiecare clasă de stare răspunde la describe() în felul ei și știe ce stare urmează — comanda însăși nu conține deloc logică legată de stare.

Fiecare stare este o clasă

advance() rămâne mereu o singură linie. Adăugarea unei stări „livrată” înseamnă o clasă nouă plus o singură metodă next_state() modificată — fără vreun lanț if/elif prin care să cauți.

Prompt
Scrie un program Python cu șablonul Stare: un protocol State cu next_state și describe, clasele de stare New, Paid și Shipped (Shipped rămâne Shipped) și o clasă Order care păstrează o stare și are o metodă advance care o înlocuiește. Trece o comandă prin toate cele trei stări, afișând fiecare descriere.
Ieșire: program Python complet

Când să-l folosești

Folosește-l atunci când comportamentul unui obiect diferă cu adevărat în funcție de stare, iar stările au reguli reale de tranziție — comenzi, documente (ciornă/revizuire/publicat), conexiuni, personaje din jocuri.

Renunță la el atunci când o stare este doar afișată și nu schimbă niciodată comportamentul. Un câmp de tip șir și un singur if/elif sunt suficiente sub trei stări cu reguli simple.


Avantaje și dezavantaje

Avantaje: regulile fiecărei stări se află într-o singură clasă mică; tranzițiile imposibile pur și simplu nu sunt scrise; stările noi extind codul în loc să-l modifice.

Dezavantaje: multe clase mici pentru mașini de stări simple; fluxul întregii mașini este împrăștiat prin fișiere — o diagramă într-un comentariu ajută.