A StringBuilder
mirip dengan Pola Builder, tetapi tidak berbagi banyak dengan deskripsi GoF dari pola desain ini. Titik asli dari pola desain adalah
Pisahkan konstruksi objek yang kompleks dari representasinya sehingga proses konstruksi yang sama dapat membuat representasi yang berbeda.
- dari Pola Desain , oleh Gamma, Helm, Johnson, Vlissides.
(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:
interface ArticleBuilder {
void addTitle(String title);
void addParagraph(String paragraph);
}
void createArticle(ArticeBuilder articleBuilder) {
articleBuilder.addTitle("Is String Builder an application of ...");
articleBuilder.addParagraph("Is the Builder Pattern restricted...");
articleBuilder.addParagraph("The StringBuilder class ...");
}
kita mungkin berakhir dengan a HtmlDocument
atau a TexDocument
atau a MarkdownDocument
tergantung pada implementasi konkret yang disediakan:
class HtmlDocumentBuilder implements ArticleBuilder {
...
HtmlDocument getResult();
}
HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();
Jadi salah satu titik utama dari pola Builder adalah polimorfisme . Buku Pola Desain membandingkan pola ini dengan Pabrik Abstrak:
Abstrak Factory mirip dengan Builder dalam hal itu juga dapat membangun objek yang kompleks. Perbedaan utama adalah bahwa pola Builder berfokus pada membangun objek yang kompleks selangkah demi selangkah. […] Builder mengembalikan produk sebagai langkah terakhir, tetapi sejauh menyangkut Pabrik Abstrak, produk akan segera dikembalikan.
- dari Pola Desain , oleh Gamma, Helm, Johnson, Vlissides.
Aspek langkah demi langkah ini kemudian menjadi aspek yang lebih populer dari pola Builder, sehingga secara umum pola Builder dipahami seperti ini:
Membagi konstruksi suatu objek menjadi beberapa langkah. Ini memungkinkan kami untuk menggunakan argumen yang dinamai atau parameter opsional bahkan dalam bahasa yang tidak mendukung fitur ini.
Wikipedia mendefinisikan pola seperti ini:
Pola pembangun adalah pola desain perangkat lunak pembuatan objek. Berbeda dengan pola pabrik abstrak dan pola metode pabrik yang niat adalah untuk memungkinkan polimorfisme, maksud dari pola pembangun adalah untuk menemukan solusi untuk anti-pola telescoping konstruktor [rujukan?] . [...]
Pola pembangun memiliki manfaat lain. Dapat digunakan untuk objek yang berisi data datar (kode html, kueri SQL, sertifikat X.509 ...), artinya, data yang tidak dapat diedit dengan mudah. Jenis data ini tidak dapat diedit langkah demi langkah dan harus diedit sekaligus. Cara terbaik untuk membangun objek seperti itu adalah dengan menggunakan kelas pembangun. [rujukan?]
- dari Builder Pattern di Wikipedia , oleh berbagai kontributor.
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 memanggil StringBuilder
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.