Sobes.tech
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 суроо-талапты иштетет

Ушул жол менен, объект динамикалык түрдө өзүнүн жүрүм-турумун өзгөртөт, жөн гана ички абалын алмаштырып.