Sobes.tech
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.