Sobes.tech
Middle — Middle+

Kunt u de interne implementatie van het State-patroon uitleggen en hoe het de toestand van het object beheert?

sobes.tech AI

Antwoord van AI

Het State-patroon stelt een object in staat om zijn gedrag te wijzigen afhankelijk van de interne toestand, door de toestandklasse tijdens de uitvoering te veranderen.

De interne implementatie is meestal gebaseerd op de volgende principes:

  • Er is een context (Context) die een verwijzing bevat naar het huidige toestandobject (State).
  • De interface State definieert een set methoden die verschillende toestanden implementeren.
  • Elke concrete toestand implementeert deze interface en definieert het gedrag voor die toestand.
  • De context delegeert methodenaanroepen aan de huidige toestand.
  • Indien nodig kan de toestand zichzelf wijzigen door de verwijzing in de context te veranderen naar een ander toestandobject.

Voorbeeld in 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("Toestand A behandelt het verzoek")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("Toestand B behandelt het verzoek")
        context.changeState(to: ConcreteStateA())
    }
}

// Gebruik:
let context = Context(state: ConcreteStateA())
context.request() // Toestand A behandelt het verzoek
context.request() // Toestand B behandelt het verzoek

Op deze manier verandert het object zijn gedrag dynamisch, door simpelweg te schakelen tussen zijn interne toestanden.