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.