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 обработва заявката
По този начин обектът променя поведението си динамично, просто превключвайки вътрешното си състояние.