Sobes.tech
Middle — Middle+

Можете ли да обясните вътрешната реализация на патърна State и как той управлява състоянието на обекта?

sobes.tech AI

Отговор от AI

Шаблонът State позволява на обект да променя поведението си в зависимост от вътрешното си състояние, като по време на изпълнение променя класа на състоянието.

Вътрешната реализация обикновено се основава на следните принципи:

  • Има контекст (Context), който съдържа препратка към текущия обект на състоянието (State).
  • Интерфейсът State определя набор от методи, които реализират различни състояния.
  • Всяко конкретно състояние реализира този интерфейс и определя поведението за това състояние.
  • Контекстът делегира извикванията на методите към текущото състояние.
  • При необходимост състоянието може да се промени само, като промени препратката в контекста към друг обект на състоянието.

Пример на 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("Състояние A обработва заявката")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("Състояние B обработва заявката")
        context.changeState(to: ConcreteStateA())
    }
}

// Използване:
let context = Context(state: ConcreteStateA())
context.request() // Състояние A обработва заявката
context.request() // Състояние B обработва заявката

По този начин обектът променя поведението си динамично, просто превключвайки вътрешното си състояние.