Giới thiệu

Thuật ngữ các mẫu thiết kế hay còn gọi là “Design Patterns” nghe có vẻ trang trọng khi bạn lần đầu tiên bắt gặp nó. Tuy nhiên, trên thực tế, các mẫu thiết kế là cách thuận tiện để tái sử dụng code hướng đối tượng  giữa các dự án và giữa các lập trình viên. Ý tưởng đằng sau các mẫu thiết kế khá đơn giản – ghi xuống và cập nhật các tương tác chung giữa các đối tượng mà các lập trình viên có thường xuyên thấy có ích.
Các lĩnh vực design patterns được biết đến đầu những năm 1980. Vào lúc đó, Smalltalk là ngôn ngữ hướng đối tượng phổ biến nhất và C++ được vẫn còn trong giai đoạn trứng của nó. Cùng lúc đó, lập trình hướng cấu trúc vẫn thường được sử dụng và lập trình hướng đối tượng vẫn chưa được hỗ trợ rộng rãi. Ý tưởng về lập trình bằng các framework cũng đã được phổ biến, tuy nhiên khi mà các framework phát triển, nó mang dáng dấp một điều gì đó mà ngày nay chúng ta gọi là design patterns.

Một trong những framework thường xuyên được nói đến là framework Model-View-Controller cho Smalltalk(Krasner và Pope, 1988), mà trong đó nó chia vấn đề giao diện người dùng thành 3 phần. Trong đó, Model-chứa đựng các phần tính toán của một chương trình, View-đại diện cho giao diện người dùng, Controller-tương tác giữa người dùng với view.
Mỗi khía cạnh của vấn đề là một đối tượng riêng biệt và nó có quy tắc riêng để quản lý dữ liệu của nó. Giao tiếp giữa người sử dụng, GUI và các dữ liệu cần được kiểm soát cẩn thận và sự tách biệt của các chức năng này được thực hiện rất độc đáo. Ba đối tượng giao tiếp với nhau bằng cách sử dụng  tập hợp các kết nối được giới hạn là một ví dụ về một mẫu thiết kế mạnh mẽ.

Nói cách khác, các mẫu thiết kế mô tả cách các đối tượng giao tiếp mà không vướng vào các mô hình dữ liệu và phương thức của nhau. Và việc duy trì sự tách biệt này là mục tiêu của lập trình hướng đối tượng tốt.
Design Patterns được công nhận chính thức hơn trong những năm 1990 bởi Helm (1990) và Erich Gamma (1992), người đã mô tả các mô hình kết hợp trong framework  ứng dụng giao diện  người dùng độ họa(GUI), ET++.

Định nghĩa Design Pattern

Design patterns là tập các giải pháp cho cho vấn đề phổ biến trong thiết kế các hệ thống máy tính. Đây là tập các giải pháp đã được công nhận là tài liệu có giá trị, những người phát triển có thể áp dụng giải pháp này để giải quyết các vấn đề tương tự. Giống như với các yêu cầu của thiết kế và phân tích hướng đối tượng (nhằm đạt được khả năng sử dụng các thành phần và thư viện lớp), việc sử dụng các mẫu cũng cần phải đạt được khả năng tái sử dụng các giải pháp chuẩn đối với vấn đề thường xuyên xảy ra.
Christopher Alexander nói rằng :” Mỗi một mẫu mô tả một vấn đề xảy ra lặp đi lặp lại trong môi trường và mô tả cái cốt lõi của giải pháp để cho vấn đề đó.Bằng cách nào đó bạn đã dùng nó cả triệu lần mà không làm giống nhau 2 lần”.

Các kiểu Design Patterns

Các tác giả phân chia các patterns thành các loại sau: creational, structuralbehavioral:

  • Creational patterns: tạo ra các đối tượng cho bạn, thay vì bạn phải khởi tạo các đối tượng một cách trực tiếp. Điều này cho phép ứng dụng của bạn linh động hơn trong việc quyết định các đối tượng nào cần thiết được tạo ra trong một trường hợp cụ thể.
  • Structural patterns: giúp cho bạn sắp xếp các nhóm đối tượng vào các cấu trúc lớn hơn, chẳng hạn như các giao diện người dùng phức tạp hay các dữ liệu kế toán.
  • Behavioral patterns: giúp cho bạn định nghĩa các giao tiếp giữa các đối tượng trong hệ thống của bạn và cách thức các luồng flow được điều khiển trong một chương trình phức tạp.

Bạn thấy bài viết này thế nào?

Các bài liên quan:
Design Patterns trong Java – Phần 2
Desing Patterns trong Java – Phần 3