Middle — Middle+
Kas saaksite selgitada State mustri sisemist rakendust ja kuidas see objekti olekut juhib?
sobes.tech AI
Vastus AI-lt
State muster võimaldab objektil muuta oma käitumist sõltuvalt sisemisest olekust, samal ajal muutudes oleku klassi jooksul täitmise ajal.
Sisemine teostus põhineb tavaliselt järgmistel põhimõtetel:
- On kontekst (Context), mis sisaldab viidet praegusele olekuobjektile (State).
- State-liides määratleb komplekti meetodeid, mis erinevad olekute kaupa.
- Iga konkreetne olek rakendab seda liidest ja määratleb selle oleku jaoks sobiva käitumise.
- Kontekst edastab meetodikutsed praegusele olekule.
- Vajadusel võib olek iseennast muuta, muutes viidet kontekstis teisele olekuobjektile.
Näide Swiftis (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("State A käsitleb taotlust")
context.changeState(to: ConcreteStateB())
}
}
class ConcreteStateB: State {
func handle(context: Context) {
print("State B käsitleb taotlust")
context.changeState(to: ConcreteStateA())
}
}
// Kasutamine:
let context = Context(state: ConcreteStateA())
context.request() // State A käsitleb taotlust
context.request() // State B käsitleb taotlust
Seega muudab objekt oma käitumist dünaamiliselt, lihtsalt lülitades sisemist olekut.