Giới thiệu tài liệu
Tài liệu này trình bày về hai mẫu thiết kế (design pattern) quan trọng là Prototype và Composite. Prototype thuộc nhóm Creational Pattern, tập trung vào việc tạo đối tượng mới bằng cách sao chép từ đối tượng đã có, giúp tối ưu hóa hiệu suất và giảm độ phức tạp. Composite thuộc nhóm Structural Pattern, cho phép xây dựng cấu trúc cây từ các đối tượng và tương tác với cấu trúc này như một thực thể duy nhất, đơn giản hóa việc xử lý các thành phần phức tạp.
Đối tượng sử dụng
Sinh viên và các nhà phát triển phần mềm muốn tìm hiểu về các mẫu thiết kế Prototype và Composite, cách chúng hoạt động và khi nào nên sử dụng chúng.
Nội dung tóm tắt
### Prototype Pattern
**Tổng quan:** Prototype là một creational pattern cho phép tạo các đối tượng mới bằng cách sao chép một đối tượng hiện có (prototype). Điều này hữu ích khi việc tạo mới một đối tượng từ đầu tốn kém hoặc phức tạp.
**Ứng dụng:**
* Khi cần tạo nhiều đối tượng tương tự nhau với chỉ một vài khác biệt.
* Khi việc khởi tạo đối tượng phức tạp và tốn tài nguyên.
* Khi muốn ẩn đi sự phức tạp của quá trình khởi tạo đối tượng.
**Ưu điểm:**
* Cải thiện hiệu suất bằng cách tránh việc tạo mới đối tượng từ đầu.
* Giảm sự phụ thuộc vào các lớp cụ thể.
* Cho phép tạo các đối tượng mới bằng cách sửa đổi các thuộc tính của đối tượng prototype.
**Nhược điểm:**
* Sao chép các đối tượng phức tạp có thể khó khăn, đặc biệt khi có các tham chiếu vòng.
* Cần phải cẩn thận khi thực hiện sao chép sâu (deep copy) để đảm bảo rằng tất cả các đối tượng được tham chiếu đều được sao chép đúng cách.
### Composite Pattern
**Tổng quan:** Composite là một structural pattern cho phép bạn tạo ra các cấu trúc cây từ các đối tượng, trong đó mỗi node có thể là một đối tượng đơn lẻ (leaf) hoặc một tập hợp các đối tượng khác (composite).
**Ứng dụng:**
* Khi cần biểu diễn các cấu trúc dữ liệu phân cấp.
* Khi muốn xử lý các đối tượng đơn lẻ và các nhóm đối tượng một cách đồng nhất.
**Ưu điểm:**
* Đơn giản hóa việc làm việc với các cấu trúc cây phức tạp.
* Cho phép thêm các thành phần mới vào cấu trúc cây mà không cần thay đổi code hiện có.
* Thực hiện tính đồng nhất giữa các đối tượng đơn lẻ và các nhóm đối tượng.
**Nhược điểm:**
* Có thể làm tăng độ phức tạp của mã nguồn.
* Khó hạn chế loại thành phần mà một composite có thể chứa.