Τι είναι το μοτίβο σχεδίασης Factory Builder;
sobes.tech AI
Απάντηση από AI
Το μοτίβο Factory Builder, ή πιο σωστά το Factory Method σε συνδυασμό με το Builder, είναι ένας συνδυασμός δύο μοτίβων που βελτιώνουν τη δημιουργία σύνθετων αντικειμένων.
Το Factory Method ορίζει ένα διεπαφή για τη δημιουργία αντικειμένου, αλλά επιτρέπει στις υποκατηγορίες να αποφασίζουν ποια κλάση θα δημιουργηθεί. Αναθέτει την ευθύνη της δημιουργίας του αντικειμένου στις υποκλάσεις.
Το Builder διαχωρίζει την κατασκευή ενός πολύπλοκου αντικειμένου από την παρουσίασή του, έτσι ώστε η ίδια διαδικασία κατασκευής να μπορεί να δημιουργεί διαφορετικές παρουσιάσεις. Επιτρέπει την κατασκευή του αντικειμένου βήμα προς βήμα, χρησιμοποιώντας αλυσίδα κλήσεων μεθόδων.
Ο συνδυασμός αυτών των μοτίβων συναντάται συχνά σε σενάρια όπου απαιτείται η δημιουργία πολλών επιλογών ενός σύνθετου αντικειμένου. Το Factory Method καθορίζει ποιο τύπο Builder πρέπει να χρησιμοποιηθεί, και ο Builder στη συνέχεια ασχολείται με το πώς να δημιουργήσει το αντικείμενο αυτού του τύπου με διαφορετικές διαμορφώσεις.
Παράδειγμα χρήσης: Όταν έχετε μια ιεραρχία κλάσεων αντικειμένων που απαιτούν πολύπλοκη αρχικοποίηση, και θέλετε να δημιουργείτε αυτά τα αντικείμενα με διαφορετικές διαμορφώσεις.
Τυπική δομή αλληλεπίδρασης:
- Εργοστάσιο: Έχει μια μέθοδο που επιστρέφει ένα συγκεκριμένο Builder ανάλογα με τα εισερχόμενα δεδομένα ή τον τύπο του.
- Builder: Έχει μεθόδους για την βήμα-προς-βήμα ρύθμιση των παραμέτρων του σύνθετου αντικειμένου και μια τελική μέθοδο
build(), που επιστρέφει το έτοιμο αντικείμενο. - Προϊόν: Το σύνθετο αντικείμενο που δημιουργείται από τον Builder.
Πλεονεκτήματα:
- Βελτιωμένη αναγνωσιμότητα και διαχειρισιμότητα του κώδικα κατά τη δημιουργία σύνθετων αντικειμένων.
- Ευελιξία στη δημιουργία διαφορετικών διαμορφώσεων του ίδιου τύπου αντικειμένου.
- Διαχωρισμός της λογικής δημιουργίας του αντικειμένου από την παρουσίασή του.
- Απλοποίηση της προσθήκης νέων τύπων προϊόντων (χρησιμοποιώντας το Factory Method) ή νέων τρόπων κατασκευής (χρησιμοποιώντας το Builder).
Μειονεκτήματα:
- Αύξηση του αριθμού των κλάσεων στο έργο.
- Μπορεί να είναι περιττό για απλά αντικείμενα.
Παράδειγμα (ψευδοκώδικας):
// Προϊόν
class ComplexObject {
private String partA;
private int partB;
// ιδιωτικός κατασκευαστής
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// Εσωτερική κλάση Builder
public static class Builder {
private String partA;
private int partB;
public Builder setPartA(String partA) {
this.partA = partA;
return this;
}
public Builder setPartB(int partB) {
this.partB = partB;
return this;
}
public ComplexObject build() {
return new ComplexObject(partA, partB);
}
}
}
// Εργοστάσιο που επιστρέφει Builder
class ComplexObjectFactory {
public static ComplexObject.Builder createDefaultBuilder() {
return new ComplexObject.Builder()
.setPartA("defaultA")
.setPartB(10);
}
public static ComplexObject.Builder createSpecialBuilder() {
return new ComplexObject.Builder()
.setPartA("specialA")
.setPartB(50);
}
}
// Χρήση:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();