Pattern Decorator thêm hành vi hoặc trách nhiệm vào đối tượng một cách động bằng cách bọc (wrap) chúng — mà không thay đổi class gốc. Nó cung cấp một phương án thay thế linh hoạt cho subclassing để mở rộng chức năng, cho phép bạn kết hợp các hành vi.
Pattern Decorator làm gì
DECORATOR → BỌC một đối tượng để thêm hành vi, giữ nguyên interface:
→ decorator bọc đối tượng gốc, thêm hành vi của nó, và ủy thác cho đối tượng gốc
→ bạn có thể XẾP CHỒNG các decorator (bọc một đối tượng đã bọc) → kết hợp nhiều hành vi
→ thêm chức năng MÀ KHÔNG sửa class gốc hay dùng subclassing
→ "bọc để mở rộng" — thêm hành vi linh hoạt, có thể kết hợp
