Sobes.tech
Middle — Middle+

Pouvez-vous expliquer l'implémentation interne du pattern State et comment il gère l'état de l'objet?

sobes.tech IA

Réponse de l'IA

Le patron State permet à un objet de changer son comportement en fonction de son état interne, en modifiant la classe d’état pendant l’exécution.

L’implémentation interne est généralement basée sur les principes suivants :

  • Il existe un contexte (Context) qui contient une référence à l’objet d’état actuel (State).
  • L’interface State définit un ensemble de méthodes qui implémentent différents états.
  • Chaque état concret implémente cette interface et définit le comportement pour cet état.
  • Le contexte délègue les appels de méthodes à l’état actuel.
  • Lorsqu’il est nécessaire, l’état peut se changer lui-même en modifiant la référence dans le contexte vers un autre objet d’état.

Exemple en 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("État A gère la requête")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("État B gère la requête")
        context.changeState(to: ConcreteStateA())
    }
}

// Utilisation :
let context = Context(state: ConcreteStateA())
context.request() // État A gère la requête
context.request() // État B gère la requête

Ainsi, l’objet change de comportement dynamiquement, en basculant simplement entre ses états internes.