Middle — Middle+
Можете ли објаснити унутрашњу имплементацију патерна State и како он управља стањем објекта?
sobes.tech АИ
Одговор од АИ
Шаблон 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 обрађује захтев
Овим путем, објекат динамички мења своје понашање, једноставно прелазећи између унутрашњих стања.