Sobes.tech
Middle — Middle+

Meg tudná magyarázni a State minta belső megvalósítását és hogy hogyan kezeli az objektum állapotát?

sobes.tech MI

Válasz az MI-től

A State minta lehetővé teszi egy objektum számára, hogy viselkedését az belső állapotának megfelelően változtassa, miközben futás közben az állapottípust módosítja.

A belső megvalósítás általában a következő elveken alapul:

  • Van egy kontextus (Context), amely egy hivatkozást tartalmaz a jelenlegi állapotobjektumra (State).
  • A State interfész egy olyan metódusok halmazát határozza meg, amelyeket különböző állapotok valósítanak meg.
  • Minden konkrét állapot megvalósítja ezt az interfészt, és meghatározza az adott állapot viselkedését.
  • A kontextus a metódushívásokat az aktuális állapotra delegálja.
  • Szükség esetén az állapot megváltoztathatja önmagát, módosítva a hivatkozást a kontextusban egy másik állapotobjektumra.

Swift (iOS) példában:

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("Állapot A kezeli a kérést")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("Állapot B kezeli a kérést")
        context.changeState(to: ConcreteStateA())
    }
}

// Használat:
let context = Context(state: ConcreteStateA())
context.request() // Állapot A kezeli a kérést
context.request() // Állapot B kezeli a kérést

Így az objektum dinamikusan változtatja viselkedését, egyszerűen az állapotának váltásával.