Trong loạt bài trước chúng ta đã được biết về Factory Pattern. Các bạn đã đọc và giải bài tập đó cuối bài đọc chưa ?
Chúng ta có quá nhiều thứ để làm, quá nhiều thứ khiến bạn quên đi bài tập của tôi cũng là điều dễ hiểu. Nhưng đến lúc này nếu bạn có thể nói ra ý tưởng của Factory Pattern thì đó là 1 sự thành công rồi.
Không có nhiều lời hoa mỹ hay cách hiểu sâu xa của một ý tưởng.Nhưng cần phải nắm bắt đúng vấn đề và cách giải quyết của mỗi pattern. Học không phải để biết mà là để dùng. Design Pattern cũng nằm trong quy luật đó. Chúng ta phải hiểu được ý tưởng và ứng dụng nó,và bài tập cuối mỗi bài viết chính là 1 ứng dụng nhỏ của nó.
Chúng ta bắt đầu nhé.
Ôn lại bài học chút xíu về Factory Pattern. Không biết khi nhắc tới đây các bạn nhớ những gì ? Và tôi nghĩ các bạn nên viết ra giấy những cái đầu dòng mà mình nhớ được về FactoryPattern. Rồi từ đó các bạn vẽ ra được mô hình của FactoryPattern.
Chúng ta đã đi qua về Factory Pattern sử dụng để tạo các Object tập trung một chỗ. Chúng ta cần một Factory để tạo ra các sản phẩm và các sản phẩm đó sẽ được giao cho client. Chúng ta chỉ cần cung cấp các tham số để Factory nhận biết đươc đối tượng đang được yêu cầu là gì ?
Việc mở rộng của FactoryPattern là AbstractFactory Pattern.chúng ta sẽ nói đến phần này vào một bài viết sau.
Hôm nay chúng ta sẽ đi tìm hiểu một Pattern mới là Builder Pattern. Các Builder Pattern này được sử dụng nhiều trong API của JavaJDK.
Chúng ta sẽ đi qua 6 phần sau.
Mục lục
I. Sự ra đời của Builder Pattern
II. Kiến trúc pattern
III. Các bài toán mẫu.
IV. Giải quyết các bài toán mẫu.
V. Link Code
VI. Tài liệu tham khảo.
Chúng ta sẽ đi từng phần.Các bạn đừng bỏ qua bất cứ phần nào của bài viết nhé.
I. Sự ra đời của Builder Pattern
Khi chúng ta cần tạo một đối tượng ta thường dùng contructor để khởi tạo đối tượng. Việc sử dụng constructor là cách đơn giản để tạo ra những đối tượng có thể hiện giống nhau.Kiểu tiếp cận này sẽ không hiệu quả khi khởi tạo một đối tượng phức tạp và việc tạo nên một đối tượng được thực hiện qua nhiều bước với các cách khác nhau sẽ tạo ra những thể hiện khác nhau của đối tượng.
Tại sao Constructor lại không thích hợp với các đối tượng phức tạp ?
Các đối tượng phức tạp xử dụng nhiều xử lý trong quá trình tạo ra thể hiện object.Mà các xử lý này chỉ được đặt trong constructor do đó Class sẽ bị đóng kín và không có tính module.khi chúng ta thêm hoặc thay đổi thì chúng ta phải thay đổi code hiện tại đang có.
Tại sao Constructor lại không thích hợp với để dùng với những đối tượng với các xử lý khác nhau sẽ tạo ra những thể hiện khác nhau ?
Khi chúng ta tạo ra 1 object với các xử lý logic trong constructor. chúng ta có thể tạo ra bất kỳ object nào. Nhưng vấn đề xuất hiện khi chúng ta cần có 1 object tương tự với cài đặt các bước khác nhau để tạo ra một object khác. Nếu chúng ta sử dụng interface để định nghĩa các bước cài đặt thì constructor không thể nào có thể cài đặt các xử lý đó.
Các vấn đề này được xử lý với ý tưởng của builder
- Tách các xử lý phức tạp ra ngoài constructor
- Dùng một lớp tham chiếu để thực hiện các xử lý đó và trả về Object ở bước cuối cùng.
Tới đây chắc các bạn còn hơi mơ hồ về thiết kế của builder pattern.Đừng vội nhé, chúng ta sẽ đi thảo luận các bài toán cần giải quyết bằng builder pattern.
II.Kiến trúc Builder Pattern
- Builder là một interface(abstract class) cài đặt các phần của Product Object
- ConcreteBuilder là lớp cài đặt chi tiết các phần được định nghĩa bởi builder.ConcreteBuilder sẽ trả về kết quả là Object Product sau khi thực hiện xong các xử lý
- Director là class tạo ra đối tượng phức tạp ( Product ) bằng Builder
- Product là class phức tạp sẽ được xây dựng.
Flow thực hiện như sau :
1. Client tạo ra một đối tượng ConcreteBuilder thích hợp và Director.
2. Client cung cấp đối tượng ConcreateBuilder cho Constructor Director.
3. Trong constructor Director. Gọi hàm builer.buidPart().Hàm này sẽ thực hiện các bước tạo ra đối tượng Product.
4. Client dùng đối tượng ConcreteBuilder để lấy Product về bằng cách gọi hàm getResult.
5. Chúng ta có thể dùng Factory Pattern để tạo ra builder thích hợp trong từng trường hợp.
III. Các bài toán mẫu
Bài 1 .Chúng ta có 1 xưởng sản xuất xe. Chúng ta có thể sản xuất xe máy, xe mô tô,xe đạp.Các phương tiện này đều được sản xuất và lắp ráp tại xưởng. Đầu tiên là bước làm các chi tiết nhỏ theo thiết kế. kế tiếp là lắp ráp chúng lại với nhau. Tiếp tục đưa các phương tiên vừa lắp ráp xong cho vào trong 1 bể sơn để sơn toàn bộ phương tiện.Sau đó thực hiện gắn động cơ nếu là xe máy và ô tô, gắn trục quay nếu là xe đạp. và bước cuối cùng là kiểm tra thiết bị theo các yêu cầu khác nhau.
Hãy xây dựng chương trình xuất hiện trên màn hình các yêu cầu của bài toán.
ví dụ : người dùng nhập
“xemay”
– sản xuất thiết bị A001.
– sản xuất thiết bị A002
– sản xuất thiết bị A003
– Sơn thiết bị A001.
– Sơn thiết bị A003.
….
Một số mẫu web - dịch vụ - ứng dụng mới đang bán chạy
Lasa nền tảng tạo website nhanh, chỉ 4 bước có ngay website chuyên nghiệp
Mẫu web BĐS chuyên cho thuê chung cư nhà phố
1,490,000₫490,000₫Mẫu Web bán trang sức, nữ trang, đồng hồ số 7
Mẫu web dịch vụ order
Mẫu Web nội thất mẫu số 28
Mẫu Web mỹ phẩm mẫu số 30
Mẫu Web bán camera , điện máy, công nghệ mẫu số 4