© 2026 Laravel

Design Pattern là gì?

4 phút đọc

#1. Design Pattern là gì?

Design Pattern (mẫu thiết kế) là các giải pháp điển hình cho những vấn đề thường xuyên xuất hiện trong quá trình thiết kế phần mềm.

Nó giống như những bản thiết kế (blueprint) có sẵn mà bạn có thể tùy chỉnh để giải quyết các vấn đề lặp đi lặp lại trong code.

Bạn không thể chỉ đơn giản copy một Design Pattern và sử dụng ngay như một hàm hay thư viện có sẵn. Bởi vì Design Pattern không phải là một đoạn code cụ thể, mà là một ý tưởng hoặc cách tiếp cận tổng quát để giải quyết một vấn đề.

Bạn cần hiểu pattern và tự implement lại sao cho phù hợp với hệ thống của mình.

#2. Design Pattern khác gì Algorithm?

Design Pattern thường bị nhầm với thuật toán (Algorithm), nhưng thực tế chúng khác nhau:

  • Algorithm (thuật toán):

    • Là một chuỗi các bước rõ ràng để giải quyết một bài toán
    • Có thể implement trực tiếp Ví dụ: QuickSort, Binary Search
  • Design Pattern:

    • Là mô tả ở mức cao (high-level)
    • Không có code cố định
    • Áp dụng linh hoạt tùy vào context

Algorithm giống như công thức nấu ăn (có step rõ ràng). Design Pattern giống như bản vẽ nhà (biết kết quả, nhưng cách xây tùy bạn)

#3. Tại sao cần Design Pattern?

  • Giải quyết vấn đề đã được kiểm chứng
  • Tăng khả năng maintain code
  • Giúp team dễ hiểu code hơn
  • Tái sử dụng tư duy thay vì copy code

#4. Phân loại Design Pattern

Design Pattern được chia thành 3 nhóm chính:

Tiêu chí Creational Structural Behavioral
Mục tiêu Tạo object Tổ chức cấu trúc Quản lý hành vi
Focus chính Khởi tạo Quan hệ giữa class/object Giao tiếp & logic
Độ trừu tượng Trung bình Trung bình - cao Cao
Khi sử dụng Tạo object phức tạp Hệ thống lớn, nhiều module Logic phức tạp, nhiều tương tác
Lợi ích chính Linh hoạt tạo object Giảm coupling Tách biệt logic

#4.1 Creational Patterns (Nhóm khởi tạo)

Pattern Mô tả ngắn
Singleton Đảm bảo chỉ có 1 instance
Factory Method Tạo object thông qua method
Abstract Factory Tạo họ object liên quan
Builder Xây dựng object từng bước
Prototype Clone object có sẵn

Khi dùng:

  • Khi việc khởi tạo object phức tạp
  • Khi cần control cách object được tạo

#4.2 Structural Patterns (Nhóm cấu trúc)

Pattern Mô tả ngắn
Adapter Chuyển interface không tương thích
Bridge Tách abstraction và implementation
Composite Cấu trúc dạng cây
Decorator Mở rộng hành vi runtime
Facade Interface đơn giản cho hệ thống phức tạp
Flyweight Tối ưu memory
Proxy Đại diện cho object khác

Khi dùng:

  • Khi cần tổ chức hệ thống lớn
  • Khi muốn giảm coupling giữa các module

#4.3 Behavioral Patterns (Nhóm hành vi)

Pattern Mô tả ngắn
Observer Lắng nghe và notify
Strategy Thay đổi thuật toán runtime
Command Đóng gói request thành object
Chain of Responsibility Xử lý theo chuỗi
State Thay đổi hành vi theo trạng thái
Mediator Trung gian giao tiếp
Iterator Duyệt collection
Template Method Định nghĩa skeleton
Visitor Tách logic khỏi object

Khi dùng:

  • Khi logic phức tạp
  • Khi cần tách biệt hành vi

#5. Tổng kết

  • Design Pattern không phải code, mà là tư duy thiết kế
  • Giúp bạn viết code clean, scalable và maintainable