Design Patterns: Composite

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Thuộc nhóm: Structural

Tần suất sử dụng: Cao

Vấn đề đặt ra

Các ứng dụng đồ họa như bộ soạn thảo hình vẽ và các hệ thống lưu giữ biểu đồ cho phép người sử dụng xây dựng lên các lược đồ phức tạp khác xa với các thành phần cơ bản, đơn giản. Người sử dụng có thể nhóm một số các thành phần để tạo thành các thành phần khác lớn hơn, và các thành phần lớn hơn này lại có thể được nhóm lại để tạo thành các thành phần lớn hơn nữa. Một cài đặt đơn giản có thể xác định các lớp cho các thành phần đồ họa cơ bản như Text và Line, cộng với các lớp khác cho phép hoạt động như các khuôn chứa các thành phần cơ bản đó.

Nhưng có một vấn đề với cách tiếp cận này, đó là, mã sử dụng các lớp đó phải tác động lên các đối tượng nguyên thủy (cơ bản) và các đối tượng bao hàm các thành phần nguyên thủy ấy là khác nhau ngay cả khi hầu hết thời gian người sử dụng tác động lên chúng là như nhau. Có sự phân biệt các đối tượng này làm cho ứng dụng trở nên phức tạp hơn. Composite pattern đề cập đến việc sử dụng các thành phần đệ quy để làm cho các client không tạo ra sự phân biệt trên.

Giải pháp của Composite pattern là một lớp trừu tượng biểu diễn cả các thành phần cơ bản và các lớp chứa chúng. Lớp này cũng xác định các thao tác truy nhập và quản lý các con của nó.

Ví dụ:

Composite

 

V1Study-Composite

Composite được áp dụng trong các trường hợp sau :

  • Ta muốn biểu diễn hệ thống phân lớp bộ phận – toàn bộ của các đối tượng
  • Ta muốn các client có khả năng bỏ qua sự khác nhau giữa các thành phần của các đối tượng và các đối tượng riêng lẻ. Các client sẽ “đối xử” với các đối tượng trong cấu trúc composite một cách thống nhất.

Định nghĩa

Composite là mẫu thiết kế dùng để tạo ra các đối tượng trong các cấu trúc cây để biểu diễn hệ thống phân lớp: bộ phận – toàn bộ. Composite cho phép các client tác động đến từng đối tượng và các thành phần của đối tượng một cách thống nhất.

Biểu đồ UML

Composite: Biểu đồ UML

 

Component (DrawingElement)

  • Khai báo giao diện cho các đối tượng trong một khối kết tập.
  • Cài đặt các phương thức mặc định cho giao diện chung của các lớp một cách phù hợp.
  • Khai báo một giao diện cho việc truy cập và quản lý các thành phần con của nó
  • Định nghĩa một giao diện cho việc truy cập các đối tượng cha của các thành phần theo một cấu trúc đệ quy và cài đặt nó một cách phù hợp nhất.

Leaf (PrimitiveElement)

  • Đại diện cho một đối tượng nút là trong khối kết tập. Một lá là một nút không có con.
  • Định nghĩa hành vi cho các đối tượng nguyên thuỷ trong khối kết tập

Composite (CompositeElement)

  • Định nghĩa hành vi cho các thành phần mà có con.
  • Lưu trữ các thành phần con
  • Cài đặt toán tử quan hệ giữa các con trong giao diên của thành phần

Client (CompositeApp)

  • Vận dụng các đối tượng trong khối kết tập thông qua giao diện của thành phần

Các mẫu liên quan

Một mẫu mà thường dùng làm thành phần liên kết đến đối tượng cha là Chain of Responsibility.

Mẫu Decorator cũng thường được sử dụng với Composite.Khi Decorator và Composite cùng được sử dụng cùng nhau, chúng thường sẽ có một lớp cha chung. Vì vậy Decorator sẽ hỗ trợ thành phần giao diện với các phương thức như Add, Remove và GetChild.

Mẫu Flyweight để cho chúng ta chia sẻ thành phần, nhưng chúng sẽ không tham chiếu đến cha của chúng.

Mẫu Iterator có thể dùng để duyệt mẫu Composite.

Mẫu Visitor định vị thao tác và hành vi nào sẽ được phân phối qua các lớp lá và Composite.

» Tiếp: Decorator
« Trước: Bridge
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!