Vymení chovanie objektu podľa toho, v akom stave sa práve nachádza.
class Stav { dalej(objednavka) { throw new Error('abstraktná metóda'); }} class Nova extends Stav { dalej(objednavka) { zaplat(); objednavka.nastavStav(new Zaplatena()); }} class Zaplatena extends Stav { dalej(objednavka) { odosli(); objednavka.nastavStav(new Odoslana()); }} class Odoslana extends Stav { dalej(objednavka) { // koncový stav, ďalej sa už nikam neprepína }} class Objednavka { #stav = new Nova(); nastavStav(stav) { this.#stav = stav; } // Ani jedna podmienka. O tom, čo sa stane, rozhoduje stav. dalej() { this.#stav.dalej(this); }}