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 дархостро идора мекунад
Ин тавр, объект рафторро дар вақти воқеӣ тағйир медиҳад, танҳо бо иваз кардани ҳолати дохилӣ.