Sobes.tech
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 χειρίζεται το αίτημα

Έτσι, το αντικείμενο αλλάζει δυναμικά τη συμπεριφορά του, απλά εναλλάσσοντας την εσωτερική κατάσταση.