Berbagi teknologi

Pola Pembangun Pola Desain

2024-07-12

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

Pola Pembangun dalam pola desain adalah pola desain pembuatan objek yang umum digunakan, yang terutama digunakan untuk memecahkan masalah konstruksi objek yang kompleks. Berikut adalah pengenalan mendetail tentang mode pembuat:

1. Definisi

Pola pembangun memisahkan konstruksi suatu objek kompleks dari representasinya, sehingga memungkinkan proses konstruksi yang sama untuk menciptakan representasi yang berbeda. Dengan kata lain, ini bekerja dengan memecah proses pembuatan objek kompleks menjadi serangkaian langkah sederhana dan memungkinkan pengguna membuat objek berbeda dengan menentukan urutan dan parameter langkah-langkah tersebut.

2. Diagram dan struktur kelas

Diagram Kelas

Dalam mode pembangun, peran berikut biasanya disertakan:

  1. Peran produk (Produk): Mewakili objek kompleks yang sedang dibangun, biasanya berisi banyak komponen.
  2. Pembangun Abstrak: Mendefinisikan antarmuka abstrak untuk membuat berbagai komponen objek produk.
  3. Pembangun Beton: Mengimplementasikan antarmuka Builder, menyelesaikan metode pembuatan spesifik setiap komponen produk yang kompleks, dan menentukan antarmuka yang mengembalikan produk akhir.
  4. Direktur : Bertanggung jawab untuk memanggil metode konstruksi dan perakitan komponen di objek pembangun untuk menyelesaikan pembuatan objek kompleks. Itu tidak melibatkan informasi produk spesifik, itu hanya memisahkan klien dari pembuatnya.

3. Skenario yang berlaku

Pola pembangun cocok untuk skenario berikut:

  1. Struktur objeknya rumit: Ketika objek yang perlu dibangun memiliki struktur internal yang kompleks dan berisi banyak properti dan metode, penggunaan pola pembangun dapat menyederhanakan proses pembangunan.
  2. Proses pembangunannya rumit: Ketika proses konstruksi suatu objek melibatkan beberapa langkah, dan urutan serta parameter langkah-langkah ini mungkin berbeda, pola pembangun dapat memberikan proses konstruksi yang jelas.
  3. Penciptaan dan penggunaan yang dipisahkan: Bila Anda ingin memisahkan proses pembuatan dan penggunaan objek sehingga pengguna hanya perlu memperhatikan representasi akhir objek dan tidak perlu mempedulikan detail pembuatan objek, pola pembangun adalah pilihan yang baik.

4. Kelebihan dan Kekurangan

keuntungan
  1. Enkapsulasi yang bagus: Merangkum proses konstruksi objek kompleks di dalam pembuatnya. Klien hanya perlu menentukan jenis dan parameter konstruksi untuk mendapatkan produk akhir tanpa mengetahui detail proses konstruksi.
  2. Skalabilitas yang bagus: Jika Anda perlu menambahkan tipe build baru atau mengubah proses build, Anda hanya perlu menambahkan atau memodifikasi kelas build, yang tidak akan memengaruhi kode klien.
  3. Fleksibilitas tinggi: Fleksibilitas untuk membuat instance produk yang berbeda dengan mengubah urutan atau parameter build pembuatnya.
kekurangan
  1. Tingkatkan jumlah kelas: Karena kebutuhan untuk membuat beberapa kelas seperti antarmuka pembuat, kelas pembuat tertentu, dan kelas komandan, jumlah kelas dalam sistem dapat ditingkatkan.
  2. Kesulitan dalam modifikasi internal: Jika struktur internal produk berubah, beberapa kelas pembuat mungkin perlu dimodifikasi, sehingga meningkatkan biaya pemeliharaan sistem.

5. Contoh

Pada contoh berikut, kita akan menggunakan pola pembangun untuk merancang sistem renovasi rumah.Kita akan mendefinisikan aHouse Kelas adalah objek kompleks yang mengandung beberapa komponen dekorasi (seperti langit-langit, cat, lantai, ubin lantai, dll.).Kemudian, kita mendefinisikan aHouseBuilder Antarmuka, berisi metode abstrak untuk membuat komponen tersebut. Selanjutnya, kami membuat kelas pembangun khusus untuk setiap gaya dekorasi tertentu (seperti gaya mewah Eropa, pastoral mewah ringan, minimalis modern).Akhirnya, kita akan melewati aDirectorkelas untuk memandu proses pembangunan, tetapi mungkin tidak diperlukan dalam contoh ini karena kita dapat mendefinisikan logika bangunan lengkap secara langsung di kelas pembangun.

Namun, untuk mendemonstrasikan konsep peran konduktor, kami akan mempertahankan aDirectorclass, namun hanya untuk ilustrasi saja, sebenarnya proses pembangunan dapat dilakukan langsung di class pembangun.

  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. }

Harap dicatat bahwa dalam contoh ini,DirectorKelas sebenarnya tidak menambah banyak nilai karena semua logika build sudah dienkapsulasiHouseBuilder Antarmuka diimplementasikan. Namun dalam aplikasi yang lebih kompleks,DirectorKelas dapat digunakan untuk merangkum urutan dan logika proses pembangunan, terutama ketika proses pembangunan mencakup beberapa pembangun.

6. Kesimpulan

Melalui pengenalan di atas, kita dapat melihat bahwa pola pembangun memiliki keuntungan besar ketika membangun objek yang kompleks. Pola ini meningkatkan enkapsulasi dan skalabilitas kode dengan memisahkan proses konstruksi dari representasi, dan juga mengurangi waktu antara klien dan produk tertentu. . tingkat kopling antara.

Jika artikel ini bermanfaat untuk pembelajaran Anda, harap ingat untuk menyukai dan mengoleksinya.