Назад к вопросам
Яндекс Браузер
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
Таким образом, объект меняет свое поведение динамически, просто переключая внутреннее состояние.