blog.dopana

Back

Design patterns là giải pháp cho các vấn đề lặp lại trong thiết kế phần mềm. Không phải code mẫu — mà là template giải quyết vấn đề.

Singleton — Chỉ Một Instance#

Đảm bảo class chỉ có một instance duy nhất.

Dùng khi: Connection pool, logger, config manager.

Factory Method — Tạo Object Mà Không Cần Biết Class#

Dùng khi: Logic tạo object phức tạp, muốn giấu implementation.

Observer — Publish/Subscribe#

Khi object thay đổi, tất cả dependent object được thông báo.

Dùng khi: Event system, real-time update, React 상태 관리 (RxJS, Zustand).

Strategy — Algorithm Có Thể Swap#

Dùng khi: Nhiều cách xử lý, muốn chọn linh hoạt (sort, compression, authentication).

Decorator — Thêm Chức Năng Mà Không Sửa Class#

Dùng khi: Cần thêm chức năng linh hoạt, tránh class explosion (quá nhiều subclass).

Adapter — Kết Nối Hai Interface Khác Nhau#

Dùng khi: Legacy code integration, third-party library wrapper.

Repository — Abstraction Cho Data Layer#

Dùng khi: Dependency injection, dễ test (mock repo), dễ đổi database.

Dependency Injection — Đừng New, Hãy Nhận#

Khi Nào Dùng Pattern?#

  • Không dùng pattern vì nó “sạch” — pattern có chi phí
  • Pattern giải quyết vấn đề cụ thể — nếu không có vấn đề, đừng pattern
  • Code đơn giản > Code pattern — pattern là công cụ, không phải mục tiêu

Kết Luận#

23 patterns trong GoF, bạn chỉ thực sự cần khoảng 5-7:

  • Singleton, Factory, Repository — hầu như project nào cũng dùng
  • Observer, Strategy — event handling, algorithm selection
  • Adapter, Decorator — integration, mở rộng

Học pattern để có từ vựng giao tiếp với đồng nghiệp: “Chỗ này dùng Observer”, “Refactor theo Strategy pattern”. Quan trọng nhất: hiểu vấn đề pattern giải quyết, không phải nhớ code mẫu.

Tài liệu tham khảo#