1. Mục tiêu cần đạt được
-Hiểu được ý nghĩa của Composite Pattern
-Biết áp dụng Composite trong từng hoàn
cảnh cụ thể
-Có thể áp dụng được ngay vào một bài toán
để code.
2. Một vài ví dụ minh họa
Ví dụ về các thành phần trong một chương trình
Ví dụ về tính điểm trung bình của một trường
Muốn tính điểm trung bình của một trường, cần phải
tính điểm trung bình của lớp, trong một lớp phải tính
điểm trung bình của một học sinh, mỗi học sinh phải
tính điểm trung bình của môn mình học : toán, lý , hóa,
thể dục,…
Có những môn có nhiều điểm như điểm 15p, điểm 45p,
điểm cuối kỳ, trong khi có những môn chỉ có 1 điểm như
môn thể dục, quân sự (d0 đó những môn này ko cần tính
điểm trung bình)
3. Bài toán đặt ra
Làm thế nào có thể quản lý được những module trong
một chương trình một cách hiệu quả
Như ví dụ tính điểm trên, làm thế nào có thể quản lý
được hệ thống điểm ở trên của học sinh
Nêu ra một số cách quản lý thông thường (tạo nhiều
class, etc…)
6. Phương án giải quyết
Thành phần Component sẽ là một interface hoặc một
abstract class (sẽ so sánh sự khác nhau khi sử dụng 2
loại hình này)
Các thành phần SubClass và Composite sẽ extends
hoặc implements thành phần Component.
Có mũi tên kết tập hướng từ Component ra thành
phần composite (nghĩa là composite sẽ bao gồm nhiều
Component)
7. Áp dụng vào bài toán tính điểm
trung bình
Component
public interface Mark {
float calculatePoint();
}
8. Áp dụng vào bài toán tính điểm
trung bình
SubClass
public class Student implements Mark {
private float math;
private float physic;
public Student(….) {….}
@Override
public float calculatePoint() {
return (math + physic)/2;
}
}
9. Áp dụng vào bài toán tính điểm
trung bình
Composite
public class Class implements Mark{
ArrayList<Student> students = new ArrayList<Student>();
@Override
public float calculatePoint() {
float sum = 0;
for (Student s : students) {
sum += s.calculatePoint();
}
return 0;
}
}
10. Thực hành
Có 3 thực đơn : bữa sáng, bữa trưa, bữa tối.
Bữa sáng có : đồ ăn chính (main food) và đồ uống
(drinks)
Trong main food có : bánh mỳ, ngũ cốc, trứng ốp.
Trong drinks có : sữa, nước ép trái cây, cà fe
Bữa trưa có : cơm, rau, cá chép, thịt lợn. Trong rau có rau
muống, rau dền.
Bữa tối có : cơm, rau, cá, thịt. Trong thịt có thịt lợn, thịt gà.
Cá có cá chép, cá rô.
11. Thực hành
Sử dụng Composite pattern để in ra toàn bộ menu của thực đơn. Sử
dụng uml sau :