Sobes.tech
Middle+

Ποιος είναι ο σκοπός του προτύπου σχεδίασης Builder;

sobes.tech AI

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

Το μοτίβο Builder είναι απαραίτητο για την βήμα-βήμα κατασκευή πολύπλοκων αντικειμένων. Επιτρέπει τον διαχωρισμό της λογικής δημιουργίας του αντικειμένου από την παρουσίασή του.

Τα βασικά πλεονεκτήματα της χρήσης του:

  • Διαχωρισμός λογικής: Η διαδικασία δημιουργίας του αντικειμένου ανατίθεται σε μια ξεχωριστή κλάση (builder).
  • Ευελιξία: Επιτρέπει τη δημιουργία αντικειμένων με διαφορετικά σύνολα επιλογών, χρησιμοποιώντας τον ίδιο builder.
  • Αναγνωσιμότητα κώδικα: Η ακολουθία δημιουργίας του αντικειμένου γίνεται πιο σαφής.
  • Αποφυγή "τηλεσκοπικών κατασκευαστών": Αποτρέπει την εμφάνιση πολλών υπερφορτωμένων κατασκευαστών με διαφορετικό αριθμό παραμέτρων.

Παράδειγμα:

<?php
// Αναπαράσταση ενός πολύπλοκου αντικειμένου - ενός αυτοκινήτου
class Car {
    private $engine;
    private $color;
    private $gps;

    public function setEngine($engine) {
        $this->engine = $engine;
    }

    public function setColor($color) {
        $this->color = $color;
    }

    public function setGps($gps) {
        $this->gps = $gps;
    }

    public function showDetails() {
        echo "Μηχανή: " . $this->engine . ", Χρώμα: " . $this->color . ", GPS: " . ($this->gps ? "Ναι" : "Όχι") . "\n";
    }
}

// Κλάση builder για το Car
class CarBuilder {
    private $car;

    public function __construct() {
        $this->car = new Car();
    }

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Επιστρέφει τον εαυτό του για αλυσίδα κλήσεων
    }

    public function setColor($color) {
        $this->car->setColor($color);
        return $this;
    }

    public function setGps($gps) {
        $this->car->setGps($gps);
        return $this;
    }

    public function build() {
        return $this->car;
    }
}

// Χρήση του builder
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Κόκκινο")->setGps(true)->build();
$car1->showDetails();

$car2 = (new CarBuilder())->setEngine("V6")->setColor("Μπλε")->build(); // Χωρίς GPS
$car2->showDetails();

Σε αυτό το παράδειγμα, το CarBuilder είναι ο κατασκευαστής που δημιουργεί βήμα-βήμα ένα αντικείμενο Car. Ο κώδικας πελάτη αλληλεπιδρά μόνο με τον κατασκευαστή, χωρίς να γνωρίζει τις εσωτερικές λεπτομέρειες της δομής του αντικειμένου.