Middle — Middle+
Můžete vysvětlit vnitřní implementaci vzoru State a jak řídí stav objektu?
sobes.tech AI
Odpověď od AI
Vzor State umožňuje objektu měnit své chování v závislosti na vnitřním stavu, přičemž během běhu mění třídu stavu.
Vnitřní implementace je obvykle založena na následujících principech:
- Existuje kontext (Context), který obsahuje odkaz na aktuální objekt stavu (State).
- Rozhraní State definuje sadu metod, které implementují různé stavy.
- Každý konkrétní stav implementuje toto rozhraní a definuje chování pro tento stav.
- Kontext deleguje volání metod na aktuální stav.
- Pokud je potřeba, může se stav sám změnit tím, že změní odkaz v kontextu na jiný objekt stavu.
Příklad v Swift (iOS):
protocol State {
func handle(context: Context)
}
class Context {
private var state: State
init(state: State) {
self.state = state
}
func request() {
state.handle(context: self)
}
func changeState(to newState: State) {
self.state = newState
}
}
class ConcreteStateA: State {
func handle(context: Context) {
print("Stav A řeší požadavek")
context.changeState(to: ConcreteStateB())
}
}
class ConcreteStateB: State {
func handle(context: Context) {
print("Stav B řeší požadavek")
context.changeState(to: ConcreteStateA())
}
}
// Použití:
let context = Context(state: ConcreteStateA())
context.request() // Stav A řeší požadavek
context.request() // Stav B řeší požadavek
Tímto způsobem objekt mění své chování dynamicky, jednoduše přepínáním vnitřního stavu.