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 суроо-талапты иштетет
Ушул жол менен, объект динамикалык түрдө өзүнүн жүрүм-турумун өзгөртөт, жөн гана ички абалын алмаштырып.