Design Pattern là gì? Tổng quan về Design Pattern

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é.

1. Design Pattern là gì?

Design Pattern là gì
Design Pattern có nghĩa là mẫu thiết kế phần mềm.

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. 

Sự phát triển của Design Pattern
Hình ảnh sách Design Patterns của 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

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

Khanh Chi
Khanh Chi
February 09, 2021
0
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Tìm hiểu về Dependency Injection

Tìm hiểu về Dependency Injection

Trong bài viết trước về Inversion of Control (IoC), Got It cũng đã đề cập tới khái niệm Dependency Injection (DI). Nhiều kỹ sư vẫn đang gặp khó khăn trong việc phân biệt DI, Dependency Inversion và IoC. Vậy chúng là gì? Hãy cùng tìm hiểu câu trả lời qua bài viết sau nhé! Mục […]
Design Patterns for Dummies: Nhập môn Design Patterns

Design Patterns for Dummies: Nhập môn Design Patterns

Kể từ khi khái niệm Design Patterns được phổ biến nhờ Gang of Four, nhiều cuốn sách về Design Patterns đã ra đời. Design Patterns for Dummies là một ví dụ tiêu biểu. Trong bài viết dưới đây, bạn sẽ được cung cấp các thông tin và review chi tiết về cuốn sách này. Mục lục1. […]
Inversion of control là gì? Tìm hiểu Dependency Inversion

Inversion of control là gì? Tìm hiểu Dependency Inversion

Các khái niệm như Dependency Injection, Dependency Inversion hay Inversion of Control là gì đều là những câu hỏi khó kể cả với những kỹ sư kỳ cựu. Nhiều bạn dù đã đi làm vài năm nhưng vẫn chưa thực sự hiểu rõ về các khái niệm này mà chỉ biết sử dụng chúng trong […]
Design Pattern là gì? Tổng quan về Design Pattern

Design Pattern là gì? Tổng quan về Design Pattern

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ục1. Design Pattern là gì?2. Những nhầm lẫn về […]
Các design pattern thông dụng trong JavaScript

Các design pattern thông dụng trong JavaScript

Các design pattern thông dụng không còn là công cụ xa lạ với giới lập trình viên. Nhờ có chúng, developer tạo được các mã code có thể bảo trì, khả dụng và dễ tái sử dụng, đặc biệt đối với các ứng dụng lớn. Bài viết dưới đây sẽ giúp bạn hiểu thêm về […]
3 lý do các lập trình viên nên học Design Pattern

3 lý do các lập trình viên nên học Design Pattern

Nếu là một lập trình viên, rất khó để bạn tiếp tục phát triển sự nghiệp nếu không học Design Pattern để giải quyết các vấn đề. Bài viết giúp bạn hiểu rõ hơn về định nghĩa của các mẫu thiết kế. Và giải thích lý do tại sao nên học và ứng dụng chúng […]