Apakah pola "Builder" terbatas untuk mengatasi anti-pola "telescoping constructor", atau dapatkah itu juga dikatakan mengatasi masalah yang lebih umum dari penciptaan rumit benda tak bergerak?
The StringBuilder
kelas memiliki kata "pembangun" dalam namanya, tetapi tidak ada hubungannya dengan telescoping konstruktor, itu hanya membantu kita mengumpulkan semua data yang kita butuhkan untuk lolos ke konstruktor dari objek abadi.
Bagi saya kelihatannya jawabannya adalah "ya" yang sangat jelas, tetapi tampaknya ada beberapa ketidaksepakatan mengenai topik tersebut, jadi saya berharap seseorang mungkin dapat mengklarifikasi hal itu.
Saya menjawab pertanyaan ini: Programmer SE: "pekerjaan nyata" yang sah dalam sebuah konstruktor? di mana OP ingin membuat objek (mungkin tidak berubah) yang berisi pohon kompleks, dan gagasan pola "pembangun" muncul, dan ketika meneliti itu saya menemukan T&J ini yang tampaknya mengatakan bahwa gaya penciptaan objek "StringBuilder" adalah bukan aplikasi dari pola "Builder", untuk alasan yang tidak jelas bagi saya: Stackoverflow - StringBuilder dan Builder Pattern . (Mereka yang menjawab pertanyaan itu gagal membuat poin meyakinkan sejauh yang saya tahu.)
sumber
StringBuilder
tampaknya menggunakan larik karakter yang mendasari untuk mewakili String dan memungkinkan Anda untuk melakukan hal-hal seperti penyisipan dan penghapusan di titik mana pun. Pada akhirnya, saya berpikir bahwa StringBuilder adalah solusi untuk objek String yang tidak berubah, tetapi sebaliknya bagi saya sepertinya memenuhi maksud dari pola Builder.Jawaban:
A
StringBuilder
mirip dengan Pola Builder, tetapi tidak berbagi banyak dengan deskripsi GoF dari pola desain ini. Titik asli dari pola desain adalah(catatan: "kompleks" terutama berarti "terdiri dari banyak bagian", tidak harus "rumit" atau "sulit")
“Representasi yang berbeda” adalah kuncinya di sini. Misalnya dengan asumsi proses konstruksi ini:
kita mungkin berakhir dengan a
HtmlDocument
atau aTexDocument
atau aMarkdownDocument
tergantung pada implementasi konkret yang disediakan:Jadi salah satu titik utama dari pola Builder adalah polimorfisme . Buku Pola Desain membandingkan pola ini dengan Pabrik Abstrak:
Aspek langkah demi langkah ini kemudian menjadi aspek yang lebih populer dari pola Builder, sehingga secara umum pola Builder dipahami seperti ini:
Wikipedia mendefinisikan pola seperti ini:
Jadi seperti yang dapat kita lihat, tidak ada pemahaman yang benar-benar umum tentang pola mana yang mengacu pada nama ini, dan dalam beberapa hal definisi yang berbeda bahkan saling bertentangan (misalnya mengenai relevansi polimorfisme untuk Pembangun).
Satu-satunya properti umum
StringBuilder
dengan berbagai interpretasi pola adalah bahwa produk dibuat langkah demi langkah alih-alih dalam sekali jalan. Ini tidak memenuhi pembacaan ketat definisi GoF dari pola desain, tetapi harap dicatat bahwa pola desain adalah konsep yang mudah ditempa yang dimaksudkan untuk memfasilitasi komunikasi. Saya akan terus memanggilStringBuilder
contoh Pola Builder, meskipun yang atipikal - alasan utama untuk struktur di Jawa adalah penggabungan pemain di hadapan string abadi, tetapi tidak beberapa desain berorientasi objek yang menarik.sumber