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