Middle — Middle+
Ar galite paaiškinti State modelio vidinę įgyvendinimą ir kaip jis valdo objekto būseną?
sobes.tech AI
Atsakymas iš AI
Būdas State leidžia objektui keisti savo elgesį priklausomai nuo vidinio būsenos, keičiant būsenos klasę vykdymo metu.
Vidinė įgyvendinimas dažniausiai grindžiamas šiais principais:
- Yra kontekstas (Context), kuris turi nuorodą į dabartinį būsenos objektą (State).
- Sąsaja State apibrėžia metodų rinkinį, kuris įgyvendina skirtingas būsenas.
- Kiekviena konkreti būsena įgyvendina šią sąsają ir apibrėžia elgesį šiai būsenai.
- Kontekstas perduoda metodų iškvietimus dabartinei būsenai.
- Reikalingu atveju, būsena gali pati save pakeisti, pakeisdama nuorodą kontekste į kitą būsenos objektą.
Swift (iOS) pavyzdys:
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("Būsen A tvarko užklausą")
context.changeState(to: ConcreteStateB())
}
}
class ConcreteStateB: State {
func handle(context: Context) {
print("Būsen B tvarko užklausą")
context.changeState(to: ConcreteStateA())
}
}
// Naudojimas:
let context = Context(state: ConcreteStateA())
context.request() // Būsen A tvarko užklausą
context.request() // Būsen B tvarko užklausą
Šiuo būdu, objektas dinamiškai keičia savo elgesį, paprasčiausiai perjungdamas vidinę būseną.