+172

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/

Design Patterns là gì?

Design Pattern là một kỹ thuật trong lập trình hướng đối tượng, nó khá quan trọng và mọi lập trình viên muốn giỏi đều phải biết. Được sử dụng thường xuyên trong các ngôn ngữ OOP. Nó sẽ cung cấp cho bạn các "mẫu thiết kế", giải pháp để giải quyết các vấn đề chung, thường gặp trong lập trình. Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu. Design Pattern giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP.

Design Patterns không phải là ngôn ngữ cụ thể nào cả. Nó có thể thực hiện được ở phần lớn các ngôn ngữ lập trình, chẳng hạn như Java, C#, thậm chí là Javascript hay bất kỳ ngôn ngữ lập trình nào khác.

Mỗi pattern mô tả một vấn đề xảy ra lặp đi lặp lại, và trình bày trọng tâm của giải pháp cho vấn đề đó, theo cách mà bạn có thể dùng đi dùng lại hàng triệu lần mà không cần phải suy nghĩ.

— Christopher Alexander —

Phân loại Design Patterns

Năm 1994, bốn tác giả Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides đã cho xuất bản một cuốn sách với tiêu đề Design Patterns – Elements of Reusable Object-Oriented Software, đây là khởi nguồn của khái niệm design pattern trong lập trình phần mềm.

Bốn tác giả trên được biết đến rộng rãi dưới tên Gang of Four (bộ tứ). Theo quan điểm của bốn người, design pattern chủ yếu được dựa theo những quy tắc sau đây về thiết kế hướng đối tượng.

  • Lập trình cho interface chứ không phải để implement interface đó.
  • Ưu tiên object composition hơn là thừa kế.

Hệ thống các mẫu Design pattern hiện có 23 mẫu được định nghĩa trong cuốn “Design patterns Elements of Reusable Object Oriented Software” và được chia thành 3 nhóm:

  • Creational Pattern (nhóm khởi tạo – 5 mẫu) gồm: Factory Method, Abstract Factory, Builder, Prototype, Singleton. Những Design pattern loại này cung cấp một giải pháp để tạo ra các object và che giấu được logic của việc tạo ra nó, thay vì tạo ra object một cách trực tiếp bằng cách sử dụng method new. Điều này giúp cho chương trình trở nên mềm dẻo hơn trong việc quyết định object nào cần được tạo ra trong những tình huống được đưa ra.
  • Structural Pattern (nhóm cấu trúc – 7 mẫu) gồm: Adapter, Bridge, Composite, Decorator, Facade, Flyweight và Proxy. Những Design pattern loại này liên quan tới class và các thành phần của object. Nó dùng để thiết lập, định nghĩa quan hệ giữa các đối tượng.
  • Behavioral Pattern (nhóm tương tác/ hành vi – 11 mẫu) gồm: Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này dùng trong thực hiện các hành vi của đối tượng, sự giao tiếp giữa các object với nhau.

Nhóm Creational (nhóm khởi tạo)

Nhóm Structural (nhóm cấu trúc)

Nhóm Behavioral (nhóm hành vi/ tương tác)

Nguồn: https://gpcoder.com/4164-gioi-thieu-design-patterns/


All rights reserved

Bình luận

Đăng nhập để bình luận
Avatar

Có hình minh họa cho từng design pattern nhìn rất thích, trực quan sinh động

Avatar
@GPham
thg 1 2, 2020 6:18 SA

It's all taken from this site without citation. You should never take other's effort with a reference. See: https://refactoring.guru/

Avatar
@trung2nd
thg 2 11, 2020 4:14 CH

thank you for the original link.

Avatar
@nguyenduyphong
thg 7 9, 2020 11:29 SA

i found the link contains all images : https://refactoring.guru/design-patterns/catalog

Avatar
@dovancang
thg 9 17, 2021 4:52 SA

Thành thật mà nói giải thích khái niệm và so sánh rất hay nhưng ví dụ chưa chính xác.

Avatar
@Thatngan
thg 1 18, 2022 9:07 SA

Theo bạn ví dụ nào chưa chính xác, bạn có thể chỉ ra và phân tích được không?

Avatar
@khanhle93
thg 1 19, 2022 9:50 SA

Ví dụ vậy là tương đối dễ hiểu rồi bạn

Avatar
@TCT2001
thg 3 24, 2022 3:08 CH
Avatar
@TCT2001
thg 3 24, 2022 3:08 CH
Avatar
@ptdat87
thg 7 8, 2022 1:41 SA

Cảm ơn chia sẻ rất chi tiết của bạn

Avatar
Avatar

Tuyệt

Avatar
+172
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí