A StringBuilder
tương tự như Mẫu xây dựng, nhưng không chia sẻ nhiều với mô tả GoF của mẫu thiết kế này. Điểm ban đầu của mẫu thiết kế là
Tách việc xây dựng một đối tượng phức tạp khỏi biểu diễn của nó để cùng một quá trình xây dựng có thể tạo ra các biểu diễn khác nhau.
- từ Mẫu thiết kế , bởi Gamma, Helm, Johnson, Vlissides.
(lưu ý: Phần mềm phức tạp, chủ yếu có nghĩa là Phần tử gồm nhiều phần, không nhất thiết phải là phức tạp
Các đại diện khác nhau của người Viking là chìa khóa ở đây. Ví dụ, giả sử quá trình xây dựng này:
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 ...");
}
chúng tôi có thể kết thúc bằng một HtmlDocument
hoặc một TexDocument
hoặc MarkdownDocument
tùy thuộc vào việc triển khai cụ thể được cung cấp:
class HtmlDocumentBuilder implements ArticleBuilder {
...
HtmlDocument getResult();
}
HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();
Vì vậy, một điểm trung tâm của mẫu Builder là đa hình . Cuốn sách Mẫu thiết kế so sánh mẫu này với Nhà máy trừu tượng:
Tóm tắt Factory tương tự như Builder ở chỗ nó cũng có thể xây dựng các đối tượng phức tạp. Sự khác biệt chính là mẫu Builder tập trung vào việc xây dựng một đối tượng phức tạp từng bước. [V]] Builder trả lại sản phẩm là bước cuối cùng, nhưng theo như Nhà máy Trừu tượng có liên quan, sản phẩm sẽ được trả lại ngay lập tức.
- từ Mẫu thiết kế , bởi Gamma, Helm, Johnson, Vlissides.
Khía cạnh từng bước này sau đó đã trở thành khía cạnh phổ biến hơn của mẫu Builder, do đó theo cách nói chung, mẫu Builder được hiểu như sau:
Chia xây dựng một đối tượng thành nhiều bước. Điều này cho phép chúng tôi sử dụng các đối số được đặt tên hoặc tham số tùy chọn ngay cả trong các ngôn ngữ không hỗ trợ các tính năng này.
Wikipedia định nghĩa mô hình như thế này:
Mẫu xây dựng là một mẫu thiết kế phần mềm tạo đối tượng. Không giống như mẫu nhà máy trừu tượng và mẫu phương thức nhà máy có ý định kích hoạt tính đa hình, mục đích của mẫu xây dựng là tìm giải pháp cho mẫu chống xây dựng kính viễn vọng [cần dẫn nguồn] . [Càng]
Các mô hình xây dựng có một lợi ích khác. Nó có thể được sử dụng cho các đối tượng chứa dữ liệu phẳng (mã html, truy vấn SQL, chứng chỉ X.509 ...), nghĩa là dữ liệu không thể chỉnh sửa dễ dàng. Loại dữ liệu này không thể được chỉnh sửa từng bước và phải được chỉnh sửa cùng một lúc. Cách tốt nhất để xây dựng một đối tượng như vậy là sử dụng lớp trình xây dựng. [cần dẫn nguồn]
- từ Builder Model trên Wikipedia , bởi những người đóng góp khác nhau.
Vì vậy, như chúng ta có thể thấy, không có sự hiểu biết thực sự phổ biến về mẫu mà tên này đề cập đến, và trong một số điểm, các định nghĩa khác nhau thậm chí trái ngược với nhau (ví dụ về sự liên quan của đa hình cho Nhà xây dựng).
Thuộc tính chung duy nhất của StringBuilder
với các cách hiểu khác nhau về mẫu là sản phẩm được tạo ra từng bước chứ không phải trong một lần. Nó không đáp ứng việc đọc nghiêm ngặt định nghĩa của GoF về mẫu thiết kế, nhưng xin lưu ý rằng các mẫu thiết kế là các khái niệm dễ uốn có nghĩa là để tạo thuận lợi cho giao tiếp. Tôi sẽ tiếp tục gọi StringBuilder
một ví dụ về Mẫu xây dựng, mặc dù là một mẫu không điển hình - lý do chính cho cấu trúc đó trong Java là sự kết hợp biểu diễn với sự có mặt của các chuỗi bất biến, nhưng không phải là một thiết kế hướng đối tượng thú vị.