Một trong những bài học “vỡ lòng” của các lập trình viên là Design Pattern. “Design Pattern là gì?” là câu hỏi đầu tiên khi làm quen với khái niệm này. Hãy cùng tìm hiểu tất tần tật về Design Pattern cùng Got It nhé.
Mục lục
1. Design Pattern là gì?
Design Pattern có nghĩa là mẫu thiết kế phần mềm. Trong thiết kế phần mềm, Design Pattern là một giải pháp có tính khái quát và có thể lặp lại. Giải pháp này giải quyết những vấn đề thường xảy ra trong thiết kế phần mềm. Đây là cách tốt nhất thường được các lập trình viên hướng đối tượng có kinh nghiệm sử dụng.
Một điều cần lưu ý về Design Pattern là chúng không phải là một mẫu thiết kế hoàn chỉnh nên không thể chuyển trực tiếp thành code. Chúng là những mô tả hay mô hình cách giải quyết một vấn đề, có thể dùng được trong nhiều trường hợp. Design Pattern có được thông qua những thử nghiệm và lỗi trong một thời gian dài.
2. Những nhầm lẫn về Design Pattern
- Design Pattern không phải là mã có thể tái sử dụng. Lí do là vì chúng thường không cụ thể hóa code. Việc thực hành các Design Pattern phụ thuộc vào ngôn ngữ lập trình và thậm chí là người thực hiện nó.
- Design Pattern và Principle là hai thứ khác nhau.
- Design Pattern không phải là một cấu trúc phần mềm. Cấu trúc phần mềm đưa ra mệnh lệnh cái gì sẽ được thực hành và được đặt tại đâu. Trong khi đó, Design Pattern trình bày nên thực hiện cái gì như thế nào.
- Design Pattern không phải là những giải pháp sẵn-sàng-để-code. Chúng giống như những mô tả giải pháp sẽ trông như thế nào. Những gì bạn nên nhớ từ Design Pattern là một vấn đề và giải pháp có mối liên quan mật thiết. Cả hai đều rất quan trọng cho việc học hỏi.
3. Lịch sử phát triển Design Pattern
Vào năm 1994, bốn tác giả Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides phát hành một cuốn sách có tên là Design Pattern – Elements of Reusable Object-Oriented Software (tạm dịch: Mẫu thiết kế phần mềm: Những yếu tố có thể tái sử dụng trong thiết kế phần mềm hướng đối tượng). Đây chính là khởi đầu cho khái niệm Design Pattern trong phát triển phần mềm. Bốn tác giả này thường được biết đến là Gang of Four.
4. Cấu trúc Design Pattern
Hầu hết các Design Pattern đều được trình bày một cách thống nhất. Như vậy, mọi người có thể sử dụng chúng trong mọi trường hợp. Dưới đây là những phần thường được trình bày trong một mẫu thiết kế phần mềm:
- Mục tiêu: thường mô tả ngắn gọn vấn đề và cách giải quyết
- Động lực: giải thích kỹ hơn về vấn đề và giải pháp có thể có được từ Design Pattern
- Cấu trúc các lớp: trình bày từng phần của pattern và cách chúng liên kết với nhau
- Ví dụ code: Đưa ra ví dụ code của một trong những ngôn ngữ lập trình phổ biến nhất để người đọc hiểu được ý tưởng cơ bản của pattern.
Một vài catalog về design pattern còn liệt kê những chi tiết hữu ích khác như tính ứng dụng của một pattern, các bước triển khai và mối quan hệ với những pattern khác.
5. Phân loại Design Pattern
Hiện nay, có 26 design pattern. 26 pattern này có thể được chia thành 3 nhóm chính: Khởi tạo (Creational Pattern), Cấu trúc (Structural Pattern) và Hành vi (Behavioral Pattern).
Mẫu thiết kế khởi tạo
Mẫu thiết kế này được dùng để tạo ra đối tượng cho một class (lớp) thích hợp. Class này sẽ là giải pháp cho vấn đề. Chúng đặc biệt hữu ích khi bạn đang tận dụng tính đa hình và cần phải lựa chọn giữa các class khác nhau trong runtime (thời gian chạy) thay vì compile time (thời gian biên dịch).
Mẫu thiết kế khởi tạo hỗ trợ việc tạo ra các đối tượng trong một hệ thống mà không cần nhận dạng loại lớp cụ thể trong code. Vì vậy, bạn không cần phải viết những dòng code lớn, phức tạp để tạo bản sao của một đối tượng. Tuy nhiên, số đối tượng được tạo ra sẽ bị hạn chế.
Mẫu thiết kế cấu trúc
Mẫu thiết kế cấu trúc tạo ra những cấu trúc lớn hơn từ những phần riêng lẻ, thường là của những class khác nhau. Mẫu này rất đa dạng, tùy thuộc vào dạng cấu trúc nào cần được tạo ra, với mục đích gì. Mẫu thiết kế cấu trúc quan tâm đến cách thức các class và đối tượng được cấu trúc để tạo nên những cấu trúc lớn hơn. Chúng sử dụng tính kế thừa để xây dựng các interface (giao diện) hay implementation (triển khai).
Mẫu thiết kế hành vi
Mẫu thiết kế hành vi mô tả tương tác giữa các đối tượng và tập trung vào cách chúng giao tiếp với nhau. Chúng có thể giảm bớt những lưu đồ phức tạp thành liên kết giữa những đối tượng thuộc các class khác nhau. Mẫu hành vi còn được sử dụng để tạo thuật toán cho một class sử dụng. Nói đơn giản, chúng là một thông số có thể điều chỉnh được trong runtime.
Mẫu thiết kế này quan tâm đến các thuật toán và việc phân trách nhiệm giữa các đối tượng. Chúng không chỉ mô tả mẫu các đối tượng hay các class mà còn cả mẫu sự giao tiếp giữa chúng. Chúng khiến chúng ta quan tâm đến cách các đối tượng liên kết với nhau thay vì dòng kiểm soát. Mẫu thiết kế hành vi sử dụng tính kế thừa để phân phối hành vi giữa các class.
Thông qua bài viết dưới đây, Got It tin rằng bạn đã có được câu trả lời cho câu hỏi Design Pattern là gì cùng các kiến thức cơ bản cần thiết về mẫu thiết kế phần mềm.
Got It Vietnam – Tham khảo: Source Making, Tutorialspoint, Refactoring Guru, GofPatterns