Sobes.tech
Middle — Middle+

Môžete vysvetliť vnútornú implementáciu vzoru State a ako riadi stav objektu?

sobes.tech AI

Odpoveď od AI

Vzor State umožňuje objektu meniť svoje správanie v závislosti od vnútorného stavu, pričom počas behu mení triedu stavu.

Vnútorná implementácia je zvyčajne založená na týchto princípoch:

  • Existuje kontext (Context), ktorý obsahuje odkaz na aktuálny objekt stavu (State).
  • Rozhranie State definuje súbor metód, ktoré implementujú rôzne stavy.
  • Každý konkrétny stav implementuje toto rozhranie a definuje správanie pre tento stav.
  • Kontext deleguje volania metód na aktuálny stav.
  • V prípade potreby sa stav môže sám zmeniť, zmenou odkazu v kontexte na iný objekt stavu.

Prí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 spracúva požiadavku")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("Stav B spracúva požiadavku")
        context.changeState(to: ConcreteStateA())
    }
}

// Použitie:
let context = Context(state: ConcreteStateA())
context.request() // Stav A spracúva požiadavku
context.request() // Stav B spracúva požiadavku

Týmto spôsobom sa objekt dynamicky mení jeho správanie, jednoduchým prepínaním vnútorného stavu.