[Design Patterns #1] Bài mở đầu – Design Patterns là gì ?

Design Patterns là gì ?

Trong phát triển phần mềm, chúng ta (đặc biệt là những bạn làm vai trò Technical Leader, Solution Architect) thường phải giải quyết những bài toán về thiết kế tương đối giống nhau và lặp lại nhiều lần.

Với cùng một vấn đề, thường sẽ có nhiều cách giải quyết, nhưng theo thời gian thì một số giải pháp được ưa thích hơn các giải pháp khác vì chúng linh hoạt hơn và đáp ứng các yêu cầu về tính sử dụng lại (reusable), tính mở rộng (scalable), tính bảo trì (maintainable).

Các Design Patterns cũng giống như các công thức nấu ăn. Có một số món ăn mà nhiều đầu bếp đã thử nghiệm và nấu đi nấu lại rất nhiều lần. Sau một thời gian, một cách nấu nhất định cho một món ăn sẽ được ưa thích và ưu tiên hơn.

Design Patterns cũng vậy, một Design Pattern là một giải pháp thiết kế, một công thức đã được chứng minh bằng thực tế để giải quyết một vấn đề thường gặp trong phát triển phần mềm. Mỗi một Design Pattern sẽ đưa ra các interfaces, classes, mối quan hệ giữa chúng và cách thức chúng hoạt động để giải quyết được vấn đề một cách linh hoạt, đảm bảo tính mở rộng, bảo trì, sử dụng lại. Thay vì phải áp dụng các nguyên tắc thiết kế và lập trình cơ bản lặp đi lặp lại để đưa ra giải pháp thiết kế thì chúng ta có thể áp dụng ngay các Design Patterns có sẵn để tiết kiệm thời gian tăng chất lượng Software.

Design Patterns có tính chất common, áp dụng chung cho tất cả các ngôn ngữ lập trình hướng đối tượng.

Trong chuyên mục “Design Patterns” này, mình sẽ hướng dẫn anh em áp dụng một số Design Patterns thông dụng để giải quyết một số dạng bài toán khác nhau trong thiết kế phần mềm. Mỗi một Design Pattern đều có code mẫu đi kèm bằng ngôn ngữ C++. Series bài viết về Design Patterns dành cho đối tượng bạn đọc có kiến thức nền tảng tốt về lập trình và có hướng tìm hiểu sâu về thiết kế phần mềm để đi lên làm Technical Leader, Solution Architect.

Cuốn sách chính mà mình tham khảo để viết series này là cuốn sách rất hay về Design Patterns mà mình đã từng đọc: Design Patterns for Dummies

Mục lục

  1. Singleton Pattern
  2. Factory Pattern
  3. Adapter Pattern
  4. Facade Pattern
  5. Template Method Pattern
  6. Observer Pattern
  7. State Pattern
  8. Proxy Pattern
  9. Command Pattern

Note: Một số các pattern khác mà trên kinh nghiệm thực tế bản thân mình ít gặp, ít dùng (Builder, Decorator, Mediator, Bridge) hoặc có dùng nhưng ăn sẵn thư viện mà không phải tự code (Visitor, Iterator,  Composite)  thì tạm thời mình sẽ chưa viết bài về nó (khi nào có đủ trải nghiệm sẽ viết tiếp).

— Phạm Minh Tuấn (Shun) —