Trung BìnhDesign Patterns iconDesign Patterns

Composite pattern là gì? Khi nào dùng?

Composite cho phép compose objects thành tree structures để biểu diễn part-whole hierarchies — client xử lý individual objects và compositions đồng nhất qua cùng một interface.

Ví dụ: file system:

typescript
interface FileSystemItem {
  getSize(): number
}

class File implements FileSystemItem {
  constructor(private size: number) {}
  getSize() { return this.size }
}

class Folder implements FileSystemItem {
  private children: FileSystemItem[] = []
  add(item: FileSystemItem) { this.children.push(item) }
  getSize() {
    return this.children.reduce((sum, c) => sum + c.getSize(), 0)
  }
}

Client gọi getSize() trên cả File và Folder mà không cần biết loại.

  • Trong React, component tree là ứng dụng tự nhiên của Composite — component con và cha đều là React component.
  • Dùng khi: cần biểu diễn tree hierarchy; khi muốn client treat leaf và composite đồng nhất.
  • Không dùng khi: hierarchy phẳng hoặc interface chung quá generic, khó type-safe.

Xem toàn bộ Design Patterns cùng filter theo level & chủ đề con.

Mở danh sách Design Patterns