Sobes.tech
Junior — Middle

Μπορείτε να δώσετε ένα παράδειγμα του πιο πολύπλοκου μοτίβου σχεδίασης που έχετε εφαρμόσει στην πρακτική σας;

sobes.tech AI

Απάντηση από AI

Ένα από τα πιο πολύπλοκα μοτίβα σχεδίασης με τα οποία έχω εργαστεί σε PHP είναι το μοτίβο "Κατάσταση" (State). Αυτό το μοτίβο επιτρέπει σε ένα αντικείμενο να αλλάζει τη συμπεριφορά του ανάλογα με την εσωτερική του κατάσταση, χωρίς να αλλάζει την κλάση του.

Παράδειγμα χρήσης: είχα ένα έργο με ένα σύστημα παραγγελιών, όπου η παραγγελία μπορούσε να βρίσκεται σε διαφορετικές καταστάσεις (νέα, πληρωμένη, αποσταλμένη, ακυρωμένη). Αντί για πολλές συνθήκες if, υλοποίησα κάθε κατάσταση ως ξεχωριστή κλάση που υλοποιεί μια κοινή διεπαφή, και άλλαζα δυναμικά την κατάσταση της παραγγελίας.

interface OrderState {
    public function proceed(OrderContext $order);
}

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // λογική για μετάβαση στην κατάσταση "πληρωμένη"
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // λογική για μετάβαση στην κατάσταση "αποσταλμένη"
        $order->setState(new ShippedOrderState());
    }
}

class OrderContext {
    private $state;

    public function __construct(OrderState $state) {
        $this->state = $state;
    }

    public function setState(OrderState $state) {
        $this->state = $state;
    }

    public function proceed() {
        $this->state->proceed($this);
    }
}

// Χρήση
$order = new OrderContext(new NewOrderState());
$order->proceed(); // μεταβαίνει στην PaidOrderState
$order->proceed(); // μεταβαίνει στην ShippedOrderState

Αυτό το μοτίβο είναι πολύπλοκο επειδή απαιτεί καλή κατανόηση των αρχών της αντικειμενοστραφούς προγραμματισμού και σωστό σχεδιασμό κλάσεων για τη διαχείριση των καταστάσεων, αλλά βελτιώνει σημαντικά την αναγνωσιμότητα και την επεκτασιμότητα του κώδικα.