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 χειρίζεται το αίτημα
Έτσι, το αντικείμενο αλλάζει δυναμικά τη συμπεριφορά του, απλά εναλλάσσοντας την εσωτερική κατάσταση.