Sobes.tech
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 обрађује захтев

Овим путем, објекат динамички мења своје понашање, једноставно прелазећи између унутрашњих стања.