Κοινή χρήση τεχνολογίας

Μοτίβο δημιουργίας μοτίβων σχεδίασης

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

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

1. Ορισμός

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

2. Διάγραμμα τάξης και δομή

Διάγραμμα τάξης

Στη λειτουργία builder, συνήθως περιλαμβάνονται οι ακόλουθοι ρόλοι:

  1. Ρόλος προϊόντος (Προϊόν): Αντιπροσωπεύει ένα σύνθετο αντικείμενο που κατασκευάζεται, που συνήθως περιέχει πολλά στοιχεία.
  2. Αφηρημένος οικοδόμος: Ορίστε μια αφηρημένη διεπαφή για τη δημιουργία διαφόρων στοιχείων αντικειμένων προϊόντος.
  3. ConcreteBuilder: Εφαρμόστε τη διεπαφή Builder, ολοκληρώστε τις συγκεκριμένες μεθόδους δημιουργίας κάθε στοιχείου ενός σύνθετου προϊόντος και ορίστε μια διεπαφή που επιστρέφει το τελικό προϊόν.
  4. Διευθυντής : Υπεύθυνος για την κλήση των μεθόδων κατασκευής και συναρμολόγησης εξαρτημάτων στο αντικείμενο builder για την ολοκλήρωση της δημιουργίας πολύπλοκων αντικειμένων. Δεν περιλαμβάνει συγκεκριμένες πληροφορίες προϊόντος, απλώς αποσυνδέει τον πελάτη από τον κατασκευαστή.

3. Ισχύοντα σενάρια

Το μοτίβο Builder είναι κατάλληλο για τα ακόλουθα σενάρια:

  1. Η δομή του αντικειμένου είναι πολύπλοκη: Όταν το αντικείμενο που πρέπει να κατασκευαστεί έχει πολύπλοκη εσωτερική δομή και περιέχει πολλαπλές ιδιότητες και μεθόδους, η χρήση του μοτίβου δημιουργίας μπορεί να απλοποιήσει τη διαδικασία δόμησης.
  2. Η διαδικασία κατασκευής είναι πολύπλοκη: Όταν η διαδικασία κατασκευής ενός αντικειμένου περιλαμβάνει πολλά βήματα και η σειρά και οι παράμετροι αυτών των βημάτων μπορεί να διαφέρουν, το μοτίβο δημιουργίας μπορεί να παρέχει μια σαφή διαδικασία κατασκευής.
  3. Αποσυνδεδεμένη δημιουργία και χρήση: Όταν θέλετε να διαχωρίσετε τις διαδικασίες δημιουργίας και χρήσης αντικειμένων έτσι ώστε οι χρήστες να χρειάζεται να ενδιαφέρονται μόνο για την τελική αναπαράσταση του αντικειμένου και να μην χρειάζεται να ενδιαφέρονται για τις λεπτομέρειες της δημιουργίας αντικειμένων, το μοτίβο δημιουργίας είναι μια καλή επιλογή.

4. Πλεονεκτήματα και μειονεκτήματα

πλεονέκτημα
  1. Καλή ενθυλάκωση: Ενσωμάτωση της διαδικασίας κατασκευής σύνθετων αντικειμένων εντός του builder Ο πελάτης χρειάζεται μόνο να καθορίσει τον τύπο και τις παραμέτρους της κατασκευής για να πάρει το τελικό προϊόν χωρίς να γνωρίζει τις λεπτομέρειες της διαδικασίας κατασκευής.
  2. Καλή επεκτασιμότητα: Εάν πρέπει να προσθέσετε έναν νέο τύπο δόμησης ή να τροποποιήσετε τη διαδικασία κατασκευής, χρειάζεται μόνο να προσθέσετε ή να τροποποιήσετε την κλάση του builder, κάτι που δεν θα επηρεάσει τον κώδικα πελάτη.
  3. Υψηλή ευελιξία: Ευελιξία για τη δημιουργία διαφορετικών παρουσιών προϊόντων αλλάζοντας τη σειρά ή τις παραμέτρους κατασκευής του δημιουργού.
έλλειψη
  1. Αυξήστε τον αριθμό των τάξεων: Λόγω της ανάγκης δημιουργίας πολλαπλών κλάσεων, όπως διεπαφές οικοδόμων, ειδικών τάξεων δημιουργίας και κλάσεων εντολών, ο αριθμός των κλάσεων στο σύστημα ενδέχεται να αυξηθεί.
  2. Δυσκολία στην εσωτερική τροποποίηση: Εάν αλλάξει η εσωτερική δομή του προϊόντος, ενδέχεται να χρειαστεί τροποποίηση πολλαπλών κατηγοριών builder, αυξάνοντας το κόστος συντήρησης του συστήματος.

5. Παράδειγμα

Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε το μοτίβο οικοδόμου για να σχεδιάσουμε ένα σύστημα ανακαίνισης σπιτιού.Θα ορίσουμε αHouse Οι τάξεις είναι πολύπλοκα αντικείμενα που περιέχουν πολλαπλά στοιχεία διακόσμησης (όπως οροφές, χρώματα, δάπεδα, πλακάκια δαπέδου κ.λπ.).Στη συνέχεια, ορίζουμε αHouseBuilder Διεπαφή, που περιέχει αφηρημένες μεθόδους για τη δημιουργία αυτών των στοιχείων. Στη συνέχεια, δημιουργούμε συγκεκριμένες κατηγορίες οικοδόμων για κάθε συγκεκριμένο στυλ διακόσμησης (όπως πολυτελές ευρωπαϊκό στυλ, ελαφριά πολυτελή ποιμενική, μοντέρνα μινιμαλιστική).Τέλος, θα περάσουμε αDirectorκλάση για να καθοδηγήσει τη διαδικασία δόμησης, αλλά μπορεί να μην είναι απαραίτητο σε αυτό το παράδειγμα, καθώς μπορούμε να ορίσουμε την πλήρη λογική του κτιρίου απευθείας στην κλάση builder.

Ωστόσο, για να δείξουμε την έννοια του ρόλου του μαέστρου, θα διατηρήσουμε αDirectorκλάση, αλλά μόνο για επεξηγηματικούς σκοπούς, στην πραγματικότητα η διαδικασία δόμησης μπορεί να γίνει απευθείας στην κατηγορία οικοδόμων.

  1. // 房屋类
  2. public class House {
  3. private String ceiling; // 吊顶
  4. private String paint; // 涂料
  5. private String floor; // 地板
  6. private String tiles; // 地砖
  7. // 私有构造函数
  8. private House() {}
  9. // Getter 方法
  10. public String getCeiling() {
  11. return ceiling;
  12. }
  13. public String getPaint() {
  14. return paint;
  15. }
  16. public String getFloor() {
  17. return floor;
  18. }
  19. public String getTiles() {
  20. return tiles;
  21. }
  22. // 建造者接口
  23. public interface HouseBuilder {
  24. HouseBuilder buildCeiling(String ceiling);
  25. HouseBuilder buildPaint(String paint);
  26. HouseBuilder buildFloor(String floor);
  27. HouseBuilder buildTiles(String tiles);
  28. House build();
  29. }
  30. // 豪华欧式建造者 ,注意是静态内部类
  31. public static class LuxuryEuropeanBuilder implements HouseBuilder {
  32. private House house;
  33. public LuxuryEuropeanBuilder() {
  34. this.house = new House();
  35. }
  36. @Override
  37. public HouseBuilder buildCeiling(String ceiling) {
  38. house.ceiling = "豪华欧式吊顶: " + ceiling;
  39. return this;
  40. }
  41. @Override
  42. public HouseBuilder buildPaint(String paint) {
  43. house.paint = "豪华欧式涂料: " + paint;
  44. return this;
  45. }
  46. @Override
  47. public HouseBuilder buildFloor(String floor) {
  48. house.floor = "豪华欧式地板: " + floor;
  49. return this;
  50. }
  51. @Override
  52. public HouseBuilder buildTiles(String tiles) {
  53. house.tiles = "豪华欧式地砖: " + tiles;
  54. return this;
  55. }
  56. @Override
  57. public House build() {
  58. return house;
  59. }
  60. }
  61. // ... 可以为其他风格创建类似的建造者类
  62. // 指挥者类(可选,这里主要用于展示概念)
  63. public static class Director {
  64. private HouseBuilder builder;
  65. public Director(HouseBuilder builder) {
  66. this.builder = builder;
  67. }
  68. // 这里可以添加方法来指导建造过程,但在这个例子中,我们直接在建造者中完成了所有工作
  69. public House constructHouse() {
  70. // 假设这是由指挥者指导的步骤,但在这里我们直接返回建造者的结果
  71. return builder
  72. .buildCeiling("水晶吊灯")
  73. .buildPaint("金色镶边涂料")
  74. .buildFloor("大理石地板")
  75. .buildTiles("马赛克地砖")
  76. .build();
  77. }
  78. }
  79. // 主函数,用于演示
  80. public static void main(String[] args) {
  81. HouseBuilder luxuryBuilder = new LuxuryEuropeanBuilder();
  82. // Director director = new Director(luxuryBuilder); // 如果使用指挥者
  83. House house = luxuryBuilder
  84. .buildCeiling("水晶吊灯")
  85. .buildPaint("金色镶边涂料")
  86. .buildFloor("大理石地板")
  87. .buildTiles("马赛克地砖")
  88. .build();
  89. System.out.println("Ceiling: " + house.getCeiling());
  90. System.out.println("Paint: " + house.getPaint());
  91. System.out.println("Floor: " + house.getFloor());
  92. System.out.println("Tiles: " + house.getTiles());
  93. }
  94. }

Σημειώστε ότι σε αυτό το παράδειγμα,DirectorΟι κλάσεις στην πραγματικότητα δεν προσθέτουν μεγάλη αξία, καθώς όλη η λογική κατασκευής είναι ήδη ενσωματωμένηHouseBuilder Η διεπαφή έχει υλοποιηθεί. Αλλά σε πιο σύνθετες εφαρμογές,DirectorΟι κλάσεις μπορούν να χρησιμοποιηθούν για την ενθυλάκωση της σειράς και της λογικής της διαδικασίας κατασκευής, ειδικά όταν η διαδικασία κατασκευής εκτείνεται σε πολλούς builders.

6. Συμπέρασμα

Μέσα από την παραπάνω εισαγωγή, μπορούμε να δούμε ότι το μοτίβο δόμησης έχει μεγάλα πλεονεκτήματα κατά την κατασκευή σύνθετων αντικειμένων Βελτιώνει την ενθυλάκωση και την επεκτασιμότητα του κώδικα διαχωρίζοντας τη διαδικασία κατασκευής από την αναπαράσταση και επίσης μειώνει το χρόνο μεταξύ του πελάτη και του συγκεκριμένου προϊόντος. βαθμός σύζευξης μεταξύ.

Εάν αυτό το άρθρο είναι χρήσιμο για τη μελέτη σας, θυμηθείτε να κάνετε like και να το συλλέξετε.