blog detail banner

TTLab Academy Blogs

Design Pattern là gì?

list-icon

Mục lục

plus-iconminus-icon
Tài liệu design pattern bao gồm những gì ?
Tại sao nên học design pattern?
Khi nào nên sử dụng design pattern?
Phân loại Design Pattern

Design Pattern là một giải pháp tổng thể cho các vấn đề chung trong thiết kế phần mềm. Nó cũng tương tự các bản thiết kế cho việc xây dựng nhà cửa, chúng được dùng để giải quyết các vấn đề lặp đi lặp lại trong thiết kế của bạn. Trong bài viết này, hãy cùng Tokyo Tech Lab Academy đi tìm hiểu kỹ hơn về Design Pattern nhé!

Các Design Pattern không thể copy rồi paste như cách bạn làm với các function hay thư viện có sẵn, vì chúng không phải là những đoạn code cụ thể. Design Pattern ở đây là những khái niệm tổng quát để giải quyết các vấn đề riêng biệt. Bạn có thể tìm hiểu các Design Pattern và triển khai chúng lên ứng dụng của bạn. Các Pattern thường bị nhầm lẫn với thuật toán, vì chúng đều là những khái niệm mô tả giải pháp cho một vấn đề nào đó.

Trong khi thuật toán là định nghĩa những hành động cụ thể để giải quyết vấn đề thì Design Pattern lại là một mô tả cao hơn cho các giải pháp. Code cho cùng một pattern có thể được triển khai trên nhiều ứng dụng khác nhau.

Design Pattern là gì.png

Tài liệu design pattern bao gồm những gì ?

Hầu hết các tài liệu mô tả rất chính thống, để cho mọi người có thể tái sử dụng cho nhiều trường hợp. Dưới đây là các thành phần thường có trong các tài liệu mô tả một pattern:

  • Invention: Mô tả mục đích của pattern, giúp người đọc hiểu rõ vấn đề mà pattern giải quyết và trong tình huống nào nên sử dụng nó.

  • Motivation: Cung cấp một ví dụ cụ thể về một vấn đề mà pattern giúp giải quyết, thường là thông qua một ví dụ thực tế hoặc tình huống giả định. Điều này giúp người đọc nhận biết được tình huống thực sự mà pattern có thể hữu ích.

  • Structure: Mô tả các thành phần hoặc lớp (class) tham gia vào pattern và mối quan hệ giữa chúng. Điều này thường được biểu diễn thông qua sơ đồ lớp (class diagram) hoặc sơ đồ tuần tự (sequence diagram).

  • Example: ví dụ bằng một trong những ngôn ngữ lập trình phổ biến giúp bạn dễ dàng nắm bắt ý tưởng đằng sau mỗi pattern.

Tại sao nên học design pattern?

Sự thật là các lập trình viên có thể xoay xở làm việc trong nhiều năm mà không cần biết đến bất kỳ Pattern nào. Rất nhiều người làm như vậy. Tuy nhiên, ngay cả trong trường hợp đó, bạn có thể đang triển khai một số Pattern mà không hề hay biết. Vậy tại sao bạn lại nên dành thời gian tìm hiểu chúng?

  • Có một điều luôn xảy ra trong phát triển phần mềm, đó là yêu cầu luôn thay đổi. Khi hệ thống phình to, các tính năng mới được thêm vào trong khi performance cần được tối ưu hơn, việc áp dụng Design Pattern giúp hệ thống linh hoạt, dễ thay đổi và bảo trì.

  • Design Pattern cung cấp những giải pháp đã được tối ưu hóa, đã được kiểm chứng để giải quyết các vấn đề trong việc phát triển phần mềm. Các giải pháp ở dạng tổng quát, giúp tăng tốc độ phát triển phần mềm bằng cách đưa ra các mô hình test, mô hình phát triển đã qua kiểm nghiệm.

  • Những khi bạn gặp bất kỳ khó khăn đối với những vấn đề đã được giải quyết rồi, Design Pattern là hướng đi giúp bạn giải quyết vấn đề thay vì tự tìm kiếm giải pháp tốn kém thời gian.

  • Giúp cho các lập trình viên có thể hiểu code của người khác một cách nhanh chóng (có thể hiểu là các mối quan hệ giữa các module chẳng hạn). Mọi thành viên trong team có thể dễ dàng trao đổi với nhau để cùng xây dựng dự án mà không tốn nhiều thời gian.

Khi nào nên sử dụng design pattern?

Việc sử dụng các Design Pattern sẽ giúp chúng ta giảm được thời gian và công sức suy nghĩ ra các cách giải quyết cho những vấn đề đã có lời giải. Lợi ích của việc sử dụng Design Pattern vào quá trình phát triển phần mềm đó chính là giúp chương trình chạy uyển chuyển hơn, dễ dàng quản lý tiến trình hoạt động, dễ nâng cấp bảo trì, …

Tuy nhiên điểm bất cập của Design Pattern là nó luôn là một lĩnh vực khá khó nhằn và hơi trừu tượng. Khi bạn viết code mới từ đầu, khá dễ dàng để nhận ra sự cần thiết phải có Design Pattern. Tuy nhiên, việc áp dụng Design Pattern cho code cũ thì khó khăn hơn.

Khi sử dụng những Design Pattern có sẵn thì chúng ta sẽ đối mặt với một vấn đề nữa là perfomance (code sẽ chạy chậm chẳng hạn). Cần phải chắc chắn là bạn đã hiểu toàn bộ mã nguồn làm việc như thế nào trước khi đụng vào nó. Việc này có thể là dễ dàng hoặc là đau đầu, phụ thuộc vào độ phức tạp của code.

Hiện nay chúng ta đang áp dụng rất nhiều design pattern vào công việc lập trình của mình. Nếu bạn thường tải và cài đặt các thư viện, packages hoặc module nào đó thì đó là lúc bạn thực thi một Design Pattern vào hệ thống.

Tất cả các framework cho ứng dụng web như Laravel, Codeigniter… đều có sử dụng những Design Pattern có sẵn và mỗi framework sẽ có những kiểu design pattern riêng.

Phân loại Design Pattern

Hệ thống các Design Pattern được chia thành 3 nhóm chính dựa trên mục đích và phạm vi áp dụng của chúng, bao gồm: nhóm Creational, nhóm Structural và nhóm Behavioral.

Creational Pattern: cung cấp các cơ chế tạo đối tượng để tăng tính linh hoạt và tái sử dụng mã hiện có.

  • Factory Method
  • Abstract Factory
  • Builder
  • Prototype
  • Singleton

Structural Pattern: các Pattern này liên quan đến cách tập hợp các đối tượng và lớp thành các cấu trúc lớn hơn, trong khi vẫn giữ cho cấu trúc linh hoạt và hiệu quả.

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

Behavioral Pattern: đây là các Pattern liên quan đến việc giao tiếp và phân công nhiệm vụ giữa các đối tượng.

  • Chain Of Responsibility
  • Command
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

Mỗi Design Pattern đều có mục đích và ứng dụng riêng, Tokyo Tech Lab Academy sẽ giới thiệu chi tiết từng Design Pattern cho các bạn trong các bài viết sắp tới.

Tokyo Tech Lab Academy

Tags:
lập trình viênDeveloperDesign Pattern
facebook icon
Chia sẻ
Tokyo Tech Lab

Thầy tận tâm, trò nâng tầm

Khóa học

    Liên hệ

    • email icon

    • phone icon

    • location icon

    © 2023 Tokyo Tech Lab Academy. All Rights Reserved.