Sobes.tech
Назад к вопросам
Middle — Middle+
74

Можете объяснить внутреннюю реализацию паттерна State и как он управляет состоянием объекта?

Компании, где спрашивали
Яндекс БраузерЯндекс Браузер

Ответ от нейросети

sobes.tech 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("State A handling request")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("State B handling request")
        context.changeState(to: ConcreteStateA())
    }
}

// Использование:
let context = Context(state: ConcreteStateA())
context.request() // State A handling request
context.request() // State B handling request

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