Middle — Middle+
Czy możesz wyjaśnić wewnętrzną implementację wzorca State i jak zarządza stanem obiektu?
sobes.tech AI
Odpowiedź od AI
Wzorzec State pozwala obiektowi zmieniać swoje zachowanie w zależności od wewnętrznego stanu, zmieniając klasę stanu podczas wykonywania.
Wewnętrzna implementacja zwykle opiera się na następujących zasadach:
- Istnieje kontekst (Context), który zawiera odwołanie do bieżącego obiektu stanu (State).
- Interfejs State definiuje zestaw metod, które implementują różne stany.
- Każdy konkretny stan implementuje ten interfejs i określa zachowanie dla tego stanu.
- Kontekst deleguje wywołania metod do bieżącego stanu.
- W razie potrzeby stan może zmienić się sam, zmieniając odwołanie w kontekście na inny obiekt stanu.
Przykład w 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("Stan A obsługuje żądanie")
context.changeState(to: ConcreteStateB())
}
}
class ConcreteStateB: State {
func handle(context: Context) {
print("Stan B obsługuje żądanie")
context.changeState(to: ConcreteStateA())
}
}
// Użycie:
let context = Context(state: ConcreteStateA())
context.request() // Stan A obsługuje żądanie
context.request() // Stan B obsługuje żądanie
W ten sposób obiekt zmienia swoje zachowanie dynamicznie, po prostu przełączając stan wewnętrzny.