Mẫu thiết kế (Design Pattern) đại diện cho các phương pháp tốt nhất thường được sử dụng bởi các nhà phát triển phần mềm có kinh nghiệm. Mẫu thiết kế là các giải pháp cho các vấn đề chung mà các nhà phát triển phần mềm gặp phải trong quá trình phát triển phần mềm. Những giải pháp này được rút ra từ thời gian dài thử nghiệm và lỗi của nhiều nhà phát triển phần mềm.
- project816
- programming154
- js154
- java151
- dsa142
- leetcode77
- algorithm68
- spring44
- backend42
- data-structure26
- design-pattern24
- ts23
- db19
- redis17
- elasticssearch15
- javase13
- mongodb11
- mysql11
- interview10
- nosql9
- spring-boot9
- sql8
- design8
- jvm8
- elastic7
- springboot5
- any4
- nestjs4
- go-frame3
- regex3
- about1
- blog1
- database1
- devops1
- framework1
- Docker1
- git1
- kubernetes1
- linux1
- gin1
- nextjs1
- golang1
- python1
I. 🌈 Giới thiệu design pattern
Cái gọi là design pattern là một tập hợp phương pháp đã được người ta sử dụng hoặc xác minh nhiều lần. Từ góc độ trừu tượng hoặc vĩ mô hơn, miễn là phù hợp với tình huống sử dụng và giải quyết vấn đề thực tế, mô hình nên được áp dụng trong cả DD và design pattern.
Ý tưởng
Chain of Responsibility Pattern là một mẫu thiết kế hành vi, cho phép bạn chuyển tiếp yêu cầu qua một chuỗi các đối tượng xử lý. Sau khi nhận được yêu cầu, mỗi đối tượng xử lý có thể xử lý yêu cầu hoặc chuyển tiếp nó cho đối tượng xử lý tiếp theo trong chuỗi.
Ý nghĩa
Command Pattern là một mẫu thiết kế hành vi, nó chuyển đổi một yêu cầu thành một đối tượng độc lập chứa tất cả thông tin liên quan đến yêu cầu. Quá trình chuyển đổi này cho phép bạn tham số hóa các phương thức, trì hoãn việc thực thi yêu cầu hoặc đưa yêu cầu vào hàng đợi, và cung cấp khả năng hoàn tác yêu cầu.
Giới thiệu
Interpreter Pattern định nghĩa một ngôn ngữ và biểu diễn cú pháp của nó. Nó cũng định nghĩa một trình thông dịch sử dụng biểu diễn đó để giải thích các câu trong ngôn ngữ.
Interpreter Pattern là một mẫu thiết kế hành vi.

Mục đích
Iterator Pattern là một mẫu thiết kế hành vi, cho phép bạn duyệt qua tất cả các phần tử trong một tập hợp mà không cần tiết lộ cấu trúc dữ liệu nền của tập hợp (như danh sách, ngăn xếp và cây).
Điều kiện áp dụng
- Khi cấu trúc dữ liệu phía sau tập hợp là phức tạp và bạn muốn ẩn đi sự phức tạp đó khỏi khách hàng (vì sự tiện lợi hoặc vấn đề bảo mật), bạn có thể sử dụng Iterator Pattern.
- Sử dụng mẫu này có thể giảm số lượng mã lặp lại trong chương trình.
- Nếu bạn muốn mã của bạn có thể duyệt qua các cấu trúc dữ liệu khác nhau, thậm chí là các cấu trúc dữ liệu không thể dự đoán trước, bạn có thể sử dụng Iterator Pattern.
Mục đích
Mediator Pattern là một mẫu thiết kế hành vi giúp giảm thiểu sự phụ thuộc lẫn nhau và sự hỗn loạn giữa các đối tượng. Mẫu này giới hạn sự giao tiếp trực tiếp giữa các đối tượng và buộc chúng phải hợp tác thông qua một đối tượng trung gian.
Ứng dụng
Ý nghĩa
Memento Pattern là một mẫu thiết kế hành vi, cho phép lưu và khôi phục trạng thái trước đó của đối tượng mà không tiết lộ chi tiết cài đặt của đối tượng.
Các trường hợp sử dụng
- Khi bạn cần tạo bản sao trạng thái của đối tượng để khôi phục trạng thái trước đó.
- Khi truy cập trực tiếp vào biến thành viên, truy cập getter hoặc setter của đối tượng sẽ phá vỡ tính đóng gói, bạn có thể sử dụng Memento Pattern.
Ý tưởng
Observer Pattern là một mẫu thiết kế hành vi cho phép bạn xác định một cơ chế đăng ký, cho phép nhiều đối tượng "quan sát" một đối tượng khác và được thông báo khi sự kiện xảy ra trên đối tượng đó.
Ứng dụng
- Sử dụng Observer Pattern khi việc thay đổi trạng thái của một đối tượng cần thay đổi các đối tượng khác, hoặc khi đối tượng thực tế là không xác định trước hoặc thay đổi động.
- Sử dụng Observer Pattern khi một số đối tượng trong ứng dụng phải quan sát các đối tượng khác. Tuy nhiên, việc quan sát chỉ diễn ra trong một khoảng thời gian hạn chế hoặc trong một số trường hợp cụ thể.
Ý nghĩa
State Pattern là một mẫu thiết kế hành vi, nó cho phép bạn thay đổi hành vi của một đối tượng khi trạng thái nội bộ của nó thay đổi. Nó giúp đảm bảo rằng đối tượng sẽ có hành vi chính xác tương ứng với trạng thái hiện tại của nó.
Ứng dụng
- Sử dụng State Pattern khi bạn muốn thay đổi hành vi của một đối tượng dựa trên trạng thái nội bộ của nó.
- Sử dụng State Pattern khi có nhiều hành vi khác nhau liên quan đến một đối tượng và bạn muốn tránh việc sử dụng nhiều câu lệnh điều kiện trong mã của bạn.