Skip to content

Instantly share code, notes, and snippets.

@nguyen-thom
Last active September 13, 2018 08:37
Show Gist options
  • Save nguyen-thom/93f4dc362eade8560a280ebf8ecc674c to your computer and use it in GitHub Desktop.
Save nguyen-thom/93f4dc362eade8560a280ebf8ecc674c to your computer and use it in GitHub Desktop.

Composite pattern

Pattern này thuộc về dạng cấu trúc pattern
Nó dùng để tạo một group objects mà chúng có xử lý giống như một single object đơn lẻ. Nghĩa là một tập object này có cùng một xử lý nào đó giống nhau. Xử lý giống nhau có nghĩa là thực hiện hành vi với mục đích giống nhau. Có thể thiết kế theo dạng tree dựa vào việc sử dụng nhiều composite lồng nhau. Mỗi Composite sẽ có một tập hợp riêng biệt của nó.

Có 3 thành phần trong patter này cần phải nhớ.

1. Component Component là một interface định nghĩa hành vi chung cho group object và tất cả các leaf. 2. Leaf Leaf là một thực thể đơn lẻ thực hiện hành vi dựa vào các tính chất mà mình có. 3. Composite Composite là thành phần quan trọng nhất. Nó thực hiện hành vi dựa trên các tính chất của nó đồng thời cũng thực hiện các hành vi của các con mà nó chứa.

Ví Dụ cụ thể

Ví dụ điển hình cho pattern này là công cụ tính lương của một tổ chức nào đó. Thông thường một tổ chức sẽ tổ chức theo dạng cây cấp bậc từ trên xuống. Đối với mỗi cấp bậc thì tiền lương khác nhau. Mỗi phòng ban lại có nhiều nhân viên. Để tính lương của tổng công ty chung ta phải tính lương của tất cả phòng ban. Hoặc để tính lương của một phòng ban chúng ta chỉ cần tính lương phòng ban đó dựa trên người quản lý.

Các câu hỏi còn thắc mắc đối với Pattern này.

  • Pattern này có gì khác biệt với CoR (Chain of Responsibility) ? Tại vì ChainOfResponsibility cũng tổ chức theo tập hợp object Answer : ChainOfResponsibility là dạng chain của tập object. Nó chạy qua một loạt các hành vi của các con của nó để xử lý cho một request nào đó. Các lớp cha chỉ chứa 1 lớp con. Và dùng next để loop qua các giá trị con kế cận.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment