11

Click here to load reader

Composite pattern

Embed Size (px)

Citation preview

Page 1: Composite pattern

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àncảnh cụ thể

-Có thể áp dụng được ngay vào một bài toánđể code.

Page 2: Composite pattern

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ảití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)

Page 3: Composite pattern

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ềuclass, etc…)

Page 4: Composite pattern

Mô hình tính điểm tb của trường

Page 5: Composite pattern

Phương án giải quyết Sử dụng Composite Pattern

Page 6: Composite pattern

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ànhphần composite (nghĩa là composite sẽ bao gồm nhiềuComponent)

Page 7: Composite pattern

Áp dụng vào bài toán tính điểmtrung bình Component

public interface Mark {

float calculatePoint();

}

Page 8: Composite pattern

Áp dụng vào bài toán tính điểmtrung bình SubClass

public class Student implements Mark {

private float math;

private float physic;

public Student(….) {….}

@Override

public float calculatePoint() {

return (math + physic)/2;

}

}

Page 9: Composite pattern

Áp dụng vào bài toán tính điểmtrung 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;

}

}

Page 10: Composite pattern

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ó raumuố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ô.

Page 11: Composite pattern

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 :