Middle — Middle+
Meg tudná magyarázni a State minta belső megvalósítását és hogy hogyan kezeli az objektum állapotát?
sobes.tech MI
Válasz az MI-től
A State minta lehetővé teszi egy objektum számára, hogy viselkedését az belső állapotának megfelelően változtassa, miközben futás közben az állapottípust módosítja.
A belső megvalósítás általában a következő elveken alapul:
- Van egy kontextus (Context), amely egy hivatkozást tartalmaz a jelenlegi állapotobjektumra (State).
- A State interfész egy olyan metódusok halmazát határozza meg, amelyeket különböző állapotok valósítanak meg.
- Minden konkrét állapot megvalósítja ezt az interfészt, és meghatározza az adott állapot viselkedését.
- A kontextus a metódushívásokat az aktuális állapotra delegálja.
- Szükség esetén az állapot megváltoztathatja önmagát, módosítva a hivatkozást a kontextusban egy másik állapotobjektumra.
Swift (iOS) példában:
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("Állapot A kezeli a kérést")
context.changeState(to: ConcreteStateB())
}
}
class ConcreteStateB: State {
func handle(context: Context) {
print("Állapot B kezeli a kérést")
context.changeState(to: ConcreteStateA())
}
}
// Használat:
let context = Context(state: ConcreteStateA())
context.request() // Állapot A kezeli a kérést
context.request() // Állapot B kezeli a kérést
Így az objektum dinamikusan változtatja viselkedését, egyszerűen az állapotának váltásával.