Lợi ích của việc sử dụng lớp xây dựng bên trong tĩnh


9

Trong quá trình viết các hướng dẫn mã cho một công ty, tôi thấy mình đã khuyến nghị sử dụng mẫu Builder từ Java hiệu quả, thay vì các nhà xây dựng kính thiên văn.

Tuy nhiên, sau khi suy nghĩ về nó nhiều hơn một chút, chắc chắn một giải pháp thanh lịch hơn là chỉ cần loại bỏ lớp trình xây dựng và cũng loại bỏ các hàm tạo bổ sung với các đối số tùy chọn.

Vì vậy, chỉ cần có một hàm tạo với các tham số cần thiết, getters / setters bình thường và nhận xét mã. Khi thực hiện chỉ cần tạo một thể hiện mới của đối tượng yr sau đó đặt giá trị.

Suy nghĩ ban đầu của tôi là lợi ích đến từ việc loại bỏ sự nhầm lẫn về những gì các thông số là tùy chọn và những gì được yêu cầu; tuy nhiên lợi ích thực sự đến từ việc sử dụng giao diện chuỗi / giao tiếp trôi chảy.

Mẫu trình xây dựng có lợi ích khi bạn tạo nhiều phiên bản mới vì ide có thể thực hiện công việc chân và cả nếu có nhiều (15+) tham số tùy chọn. Tuy nhiên, nó có đáng để thêm thời gian mã hóa lớp bên trong tĩnh, bạn sẽ khuyên bạn nên sử dụng trình xây dựng, hay nó là một sự lãng phí thời gian?


Câu trả lời:


8

Tôi có xu hướng tuân theo một mẫu mà các nhà xây dựng nên cung cấp tất cả các giá trị bắt buộc cần thiết để tạo một đối tượng hợp lệnhất quán . Đối với các giá trị tùy chọn, tôi cố gắng suy nghĩ về mặc định phổ biến nhất là gì, để setters được sử dụng ít nhất có thể.

Nếu tôi thấy rằng có rất nhiều giá trị tùy chọn hoặc tỷ lệ giá trị tùy chọn lớn hơn có xu hướng bị thay đổi từ mặc định của chúng, thì tôi sẽ sử dụng mẫu trình tạo (trình tạo bên trong tĩnh hoặc thiết kế tương tự khác).

Josh thường đưa ra lời khuyên khá tốt - điều tôi thích nhất ở anh ta là lời khuyên đến từ các chiến hào - anh ta thừa nhận rằng anh ta đã mắc lỗi trong việc thiết kế các phần của Java và Java hiệu quả là một phần của 'cách chữa trị' của anh ta nói :-)


1
Điều này không nói lên bất cứ điều gì về lý do tại sao bên trong nên tĩnh ...
Jimmy Hoffa

Bất biến và tác dụng phụ miễn phí cũng là một mục tiêu.
Martijn Verburg

6

Mẫu Builder của Josh Bloch, giống như Mẫu Builder của GoF, cung cấp cách tạo một đối tượng bất biến với nhiều dữ liệu mặc định mà không cần danh sách dài các hàm tạo chuỗi.

Nếu bạn "có một hàm tạo với các tham số cần thiết, getters / setters bình thường" thì đối tượng của bạn không còn bất biến nữa. I E. Bạn có thể thay đổi nó lâu sau khi khởi tạo nó.

Nếu đó không phải là vấn đề với bạn thì bạn không bao giờ cần mẫu Builder ở vị trí đầu tiên. Nếu đó là một vấn đề thì giải pháp của bạn là thiếu sót.


Tôi không nghĩ mẫu xây dựng có liên quan gì đến tính dễ biến đổi, ngay cả ví dụ gof trên wiki cũng có thể thay đổi ... en.wikipedia.org/wiki/Builder_potype#Java cũng vậy, mẫu này có những lợi ích mà tôi đã nêu trong câu hỏi.
NimChimpsky

3
@NimChimpsky: Việc có thể áp dụng mô hình Builder để tạo đối tượng có thể thay đổi hay không. Câu hỏi là, bạn có nên? Getters và setters đã tồn tại mãi mãi, nơi các đối tượng có thể biến đổi được, chúng là một giải pháp hoàn toàn vững chắc, nhưng mọi người gặp phải một vấn đề chung với việc tạo ra các đối tượng bất biến: chuỗi các nhà xây dựng không thể điều khiển được. Builder là một giải pháp phổ biến và do đó trở thành một mô hình, để dễ dàng giao tiếp.
pdr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.