Composite Pattern in Java
1. Composite Pattern
Conposite Pattern là một mẫu cấu trúc, kết hợp các đối tượng thành một cấu trúc cây để thể hiện hệ thống phân cấp xử lý- Composite Design Pattern mô tả các nhóm đối tượng có thể được xử lý theo một cách như một instance của cùng một loại đối tượng,
- Composite Pattern cho phép chúng ta kết hợp các đối tượng thành các cấu trúc cây để thể hiện hệ thống phân cấp toàn bộ.
- Ngoài ra Composite Pattern cũng cho phép chúng ta xử lý các đối tượng theo cùng một cách.
- Cấu trúc cây trong Composite Pattern cho phép chúng ta có một cấu trúc cây cho mỗi nút khi thực hiện một nhiệm vụ.
2. Thành phần trong Composite Pattern
- Component: Khai báo Interface (hoặc Abstrast Class) chung cho các thành phần đối tượng, chứa các method thao tác chung của các thành phần đối tượng.- Leaf: Class thực hiện hành vi mặc định của thành phần cơ sở. Nó không chứa một tham chiếu đến các đối tượng khác.
- Composite: Định nghĩa một thao tác cho các thành phần có thành phần con, lưu trữ các thành phần con, thực thi sự quản lý các thành phần con của Component.
- Client: Sử dụng Component interface để tương tác với các đối tượng trong Leaf và Composite.
3. Ví dụ
Giả sử chúng ta xây dựng cấu trúc của các phòng ban trong một công ty.3.1 Base Component
Chúng ta định nghĩa một interface đơn giản Department
3.2 Leaf
Đối với leaf component, chúng ta định nghĩa 2 class FinancialDepartment và SalesDepartment
Cả hai class đều có phương thức printDepartmentName() từ base Component, chúng đều in ra tên của mỗi class. Ngoài ra chúng đều là leaf class, chúng không bao gồm các đối tượng khác của Department.
3.3 Thành phần Composite
Chúng ta tạo class HeadDepartment cũng được implements từ DepartmentĐây là một class tổng hợp vì nó chứa một tập hợp các thành phần của Department, cũng như các phương thức để thêm và xoá các thành phần ra khỏi danh sách.
Phương thức printDepartmentName() được triển khai bằng cách lặp qua danh sách các phần từ Leaf và gọi phương thức thích hợp cho từng phần tử.
4. Chạy demo
Chúng ta có class CompositeDemo
Đầu tiên chúng ta tạo mới instances cho SalesDepartment và FinancialDepartment. Sau đó khởi tạo HeadDepartment và thêm các instances đã được khởi tạo trước đó vào.
Cuối cùng chúng ta kiểm tra phương thức printDepartmentName() và xem kết quả
Nhận xét
Đăng nhận xét