Sobes.tech
Middle — Middle+

Czy możesz wyjaśnić wewnętrzną implementację wzorca State i jak zarządza stanem obiektu?

sobes.tech AI

Odpowiedź od AI

Wzorzec State pozwala obiektowi zmieniać swoje zachowanie w zależności od wewnętrznego stanu, zmieniając klasę stanu podczas wykonywania.

Wewnętrzna implementacja zwykle opiera się na następujących zasadach:

  • Istnieje kontekst (Context), który zawiera odwołanie do bieżącego obiektu stanu (State).
  • Interfejs State definiuje zestaw metod, które implementują różne stany.
  • Każdy konkretny stan implementuje ten interfejs i określa zachowanie dla tego stanu.
  • Kontekst deleguje wywołania metod do bieżącego stanu.
  • W razie potrzeby stan może zmienić się sam, zmieniając odwołanie w kontekście na inny obiekt stanu.

Przykład w 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("Stan A obsługuje żądanie")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("Stan B obsługuje żądanie")
        context.changeState(to: ConcreteStateA())
    }
}

// Użycie:
let context = Context(state: ConcreteStateA())
context.request() // Stan A obsługuje żądanie
context.request() // Stan B obsługuje żądanie

W ten sposób obiekt zmienia swoje zachowanie dynamicznie, po prostu przełączając stan wewnętrzny.