Trong kỹ thuật phần mềm, Design Patterns là giải pháp chung có thể lặp lại cho một vấn đề thường gặp trong thiết kế phần mềm. Design Patterns không phải là thiết kế hoàn thiện có thể chuyển đổi trực tiếp thành code. Đó là mô tả hoặc mẫu về cách giải quyết vấn đề có thể sử dụng trong nhiều tình huống khác nhau. Bạn cũng có thể tìm thấy tất cả các câu trả lời ở đây 👉 [https://www.fullstack.cafe/Design%20Patterns](https://www.fullstack.cafe/Design%20Patterns) ![1.png](/api/v1/media/597ab0921c03f0c16e4db3ac2bcaed027fb3b2f120558e9dfd4ff2c4c3329571.png) ## Câu hỏi 1: Các danh mục chính của Design Patterns là gì? ⭐ Trả lời: Các mẫu thiết kế có thể được phân loại thành ba loại chính: Các mẫu sáng tạo Mẫu hành vi Các mẫu chức năng 🔗 Nguồn: [www.educba.com](https://www.educba.com/design-pattern-interview-questions/) ## Câu hỏi 2: Design Patterns là gì và tại sao mọi người nên sử dụng chúng? ⭐ Trả lời: Design Patterns là giải pháp được mô tả rõ ràng cho hầu hết các vấn đề thường gặp trong quá trình phát triển phần mềm. Design Patterns đại diện cho các phương pháp hay nhất được phát triển qua thời gian bởi các nhà phát triển phần mềm giàu kinh nghiệm. Chúng thúc đẩy khả năng tái sử dụng dẫn đến mã mạnh mẽ và dễ bảo trì hơn. 🔗 Nguồn: [www.educba.com](https://www.educba.com/design-pattern-interview-questions/) ## Câu hỏi 3: Mẫu hình là gì? ⭐ Trả lời: Các mẫu trong lập trình giống như công thức nấu ăn. Chúng không phải là những món ăn đã chế biến sẵn mà là hướng dẫn cắt và thái sản phẩm, nấu chúng, phục vụ chúng, v.v. Nội dung mẫu Theo quy tắc, mô tả mẫu bao gồm những nội dung sau: - một vấn đề mà mô hình giải quyết; - động lực giải quyết vấn đề bằng phương pháp được gợi ý trong mô hình; - cấu trúc các lớp bao gồm giải pháp; - một ví dụ trong một trong các ngôn ngữ lập trình; - mô tả về các sắc thái của việc triển khai mẫu trong nhiều bối cảnh khác nhau; mối quan hệ với các mẫu khác. 🔗 Nguồn: [refactoring.guru](https://refactoring.guru/design-patterns/what-is-pattern) ## Câu hỏi 4: Mô hình Singleton là gì? ⭐ Trả lời: Mẫu Singleton thuộc thể loại mẫu creational và giới thiệu một lớp duy nhất chịu trách nhiệm tạo một đối tượng trong khi đảm bảo rằng chỉ có một đối tượng duy nhất được tạo. Lớp này cung cấp một cách để truy cập đối tượng duy nhất của nó có thể được truy cập trực tiếp mà không cần phải khởi tạo đối tượng của lớp. 🔗 Nguồn: [refactoring.guru](https://refactoring.guru/design-patterns/what-is-pattern) ## Câu hỏi 5: Dependency Injection là gì? ⭐⭐ Trả lời: Kỹ thuật tiêm phụ thuộc giúp tạo ra các thành phần không liên kết chặt chẽ một cách dễ dàng, điều này thường có nghĩa là các thành phần sử dụng chức năng do giao diện xác định mà không cần biết trực tiếp lớp triển khai nào đang được sử dụng. Dependency injection giúp thay đổi hành vi của ứng dụng dễ dàng hơn bằng cách thay đổi các thành phần triển khai giao diện xác định các tính năng của ứng dụng. Nó cũng tạo ra các thành phần dễ cô lập hơn để kiểm tra đơn vị. 🔗 Nguồn: [Pro ASP.NET Core MVC 2](https://github.com/TechBookHunter/Free-CSharp-Books/blob/master/book/Pro%20ASP.NET%20Core%20MVC%202%20-%20Seventh%20Edition.pdf) ## Câu hỏi 6: Inversion of Control là gì? ⭐⭐ Trả lời: Inversion of Control là một thuật ngữ rộng nhưng đối với nhà phát triển phần mềm, nó thường được mô tả như một mô hình được sử dụng để tách rời các thành phần và lớp trong hệ thống. Ví dụ, giả sử ứng dụng của bạn có thành phần trình soạn thảo văn bản và bạn muốn cung cấp chức năng kiểm tra chính tả. Mã chuẩn của bạn sẽ trông giống như thế này: ```public class TextEditor { private SpellChecker checker; public TextEditor() { this.checker = new SpellChecker(); } }``` Những gì chúng ta đã làm ở đây tạo ra sự phụ thuộc giữa TextEditor và SpellChecker. Trong một kịch bản IoC, chúng ta sẽ làm điều gì đó như thế này: ```public class TextEditor { private IocSpellChecker checker; public TextEditor(IocSpellChecker checker) { this.checker = checker; } }``` Bạn đã Inversion of Control bằng cách chuyển giao trách nhiệm khởi tạo trình kiểm tra chính tả từ lớp TextEditor cho trình gọi. ```SpellChecker sc = new SpellChecker; // dependency TextEditor textEditor = new TextEditor(sc);``` Nguồn: [stackoverflow.com](https://stackoverflow.com/questions/3058/what-is-inversion-of-control?page=1&tab=votes#tab-top) ## Câu hỏi 7: Kể tên các loại Design Pattern? ⭐⭐ Trả lời: Các mẫu thiết kế có thể được phân loại thành ba loại: Mẫu sáng tạo, Mẫu cấu trúc và Mẫu hành vi. Creational Patterns - Các mẫu thiết kế này cung cấp một cách để tạo đối tượng trong khi ẩn logic tạo, thay vì tạo trực tiếp đối tượng bằng toán tử new. Điều này giúp chương trình linh hoạt hơn trong việc quyết định đối tượng nào cần được tạo cho một trường hợp sử dụng nhất định. Structural Patterns - Các mẫu thiết kế này liên quan đến thành phần lớp và đối tượng. Khái niệm kế thừa được sử dụng để tạo giao diện và xác định cách tạo đối tượng để có được chức năng mới. Mẫu hành vi - Các mẫu thiết kế này đặc biệt quan tâm đến giao tiếp giữa các đối tượng. 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 8: Factory pattern là gì? ⭐⭐ Trả lời: Mẫu Factory là một trong những mẫu thiết kế được sử dụng nhiều nhất và nằm trong danh mục mẫu sáng tạo . Trong mô hình Factory, chúng ta tạo đối tượng mà không cần tiết lộ logic tạo đối tượng cho máy khách và tham chiếu đến đối tượng mới được tạo bằng giao diện chung . ![2.jpg](/api/v1/media/412c036037f887df0df155410ac83cb851a5171a77361395692bbaa696c70f1a.jpg) *Ưu điểm**: Cho phép bạn ẩn việc triển khai đường nối ứng dụng (các giao diện cốt lõi tạo nên ứng dụng của bạn) Cho phép bạn dễ dàng kiểm tra đường nối của một ứng dụng (tức là để mô phỏng/làm giả) một số phần nhất định của ứng dụng để bạn có thể xây dựng và kiểm tra các phần khác Cho phép bạn thay đổi thiết kế ứng dụng của mình dễ dàng hơn, điều này được gọi là liên kết lỏng lẻo Nhược điểm Làm cho mã khó đọc hơn vì toàn bộ mã của bạn đều nằm sau lớp trừu tượng, từ đó có thể ẩn đi lớp trừu tượng khác. Có thể được phân loại là một mẫu phản khi sử dụng không đúng cách, ví dụ một số người sử dụng nó để kết nối toàn bộ ứng dụng khi sử dụng vùng chứa IOC, thay vào đó lại sử dụng Dependency Injection. 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 9: Chúng ta có thể tạo bản sao của một đối tượng đơn lẻ không? ⭐⭐ Trả lời: Có, chúng ta có thể nhưng mục đích của việc tạo Singleton Object là để có một thể hiện duy nhất phục vụ tất cả các yêu cầu. 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 10: Mẫu Builder là gì? ⭐⭐ Trả lời: Mẫu Builder xây dựng một đối tượng phức tạp bằng cách sử dụng các đối tượng đơn giản và sử dụng phương pháp từng bước. Builder này độc lập với các đối tượng khác. ![3.png](/api/v1/media/895dbe48d7e9d5f9ff29a9a00f53b06c145cd2fa21f61f64db6c1c7efcc558ea.png) Lớp Director là tùy chọn và được sử dụng để đảm bảo các bước xây dựng được thực hiện theo đúng thứ tự với đúng dữ liệu bởi đúng người xây dựng. Nó liên quan đến xác thực và phân quyền. Các bước gọi của mô hình Builder/Director có thể được trình bày về mặt ngữ nghĩa bằng cách nối phương thức hoặc cú pháp Fluent Interface . ```Pizza pizza = new Pizza.Builder() .cheese(true) .pepperoni(true) .bacon(true) .build();``` 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 11: Filter pattern là gì? ⭐⭐ Trả lời: Filter pattern hoặc Criteria pattern là một design pattern cho phép các nhà phát triển lọc một tập hợp các đối tượng bằng các tiêu chí khác nhau và kết nối chúng theo cách tách biệt thông qua các hoạt động logic. Kiểu mẫu thiết kế này thuộc về mẫu cấu trúc vì mẫu này kết hợp nhiều tiêu chí để có được một tiêu chí duy nhất. Filter pattern hữu ích khi bạn muốn thêm bộ lọc một cách động hoặc bạn đang triển khai nhiều chức năng và hầu hết chúng đều yêu cầu các tiêu chí lọc khác nhau để lọc một cái gì đó. Trong trường hợp đó, thay vì mã hóa cứng các bộ lọc bên trong các chức năng, bạn có thể tạo tiêu chí lọc và sử dụng lại ở bất kỳ nơi nào cần thiết. ```List laptops = LaptopFactory.manufactureInBulk(); AndCriteria searchCriteria = new AndCriteria( new HardDisk250GBFilter(), new MacintoshFilter(), new I5ProcessorFilter()); List filteredLaptops = searchCriteria.meets(laptops);``` 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 12: Proxy pattern là gì? ⭐⭐ Trả lời: Trong mẫu proxy , một lớp biểu diễn chức năng của một lớp khác. Kiểu mẫu thiết kế này thuộc về mẫu cấu trúc . Trong mô hình proxy, chúng ta tạo đối tượng có đối tượng gốc để giao tiếp chức năng của nó với thế giới bên ngoài. ![4.png](/api/v1/media/8c23a201dfd349b757dc4591451a9b0d556222394c97d5edcbb0c74778412174.png) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 13: Mẫu Iterator là gì? ⭐⭐ Trả lời: Mẫu Iterator là mẫu thiết kế được sử dụng rất phổ biến trong môi trường lập trình Java và .Net. Mẫu này được sử dụng để có cách truy cập các phần tử của đối tượng bộ sưu tập theo cách tuần tự mà không cần biết biểu diễn cơ bản của nó. Mẫu Iterator thuộc loại mẫu hành vi . ![5.jpg](/api/v1/media/917543d17448093a7a7197359cc744fc1f277fdfa1d410795b60ebe5a776a498.jpg) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 14: State pattern là gì? ⭐⭐ Trả lời: Trong mẫu State, hành vi của lớp thay đổi dựa trên trạng thái của nó. Kiểu mẫu thiết kế này thuộc về mẫu behavior . Trong mẫu State, chúng ta tạo ra các đối tượng biểu diễn các trạng thái khác nhau và một đối tượng ngữ cảnh có hành vi thay đổi khi đối tượng trạng thái của nó thay đổi. ![6.jpg](/api/v1/media/0d330a544c036f2e2cbe0303a27062ba7b12c77029696a79eaa943e1aac1d79e.jpg) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 15: Mẫu Null Object là gì? ⭐⭐ Trả lời: Trong mẫu Null Object , một đối tượng null thay thế việc kiểm tra thể hiện đối tượng NULL. Thay vì đặt if để kiểm tra giá trị null, Null Object phản ánh mối quan hệ không làm gì cả. Đối tượng Null như vậy cũng có thể được sử dụng để cung cấp hành vi mặc định trong trường hợp dữ liệu không khả dụng. Trong mô hình Null Object, chúng ta tạo một lớp trừu tượng chỉ định nhiều hoạt động khác nhau cần thực hiện, các lớp cụ thể mở rộng lớp này và một lớp đối tượng null cung cấp triển khai không làm gì của lớp này và sẽ được sử dụng liền mạch khi chúng ta cần kiểm tra giá trị null. ![7.jpg](/api/v1/media/6485e0c9b7a3dd4a9cb814beb6adb6b918fd338a6491e963408656256b8e4691.jpg) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 16: Mô hình chiến lược là gì? ⭐⭐ Trả lời: Trong mẫu Strategy , hành vi của lớp hoặc thuật toán của lớp có thể được thay đổi tại thời điểm chạy. Kiểu mẫu thiết kế này thuộc mẫu hành vi . Trong mẫu Strategy, chúng ta tạo ra các đối tượng đại diện cho nhiều chiến lược khác nhau và một đối tượng ngữ cảnh có hành vi thay đổi theo đối tượng chiến lược của nó. Đối tượng chiến lược thay đổi thuật toán thực thi của đối tượng ngữ cảnh. ![8.jpg](/api/v1/media/3b5bda8dffdd3c02f08c090079863f990a671a45c3fe95de887e12c082d66bf2.jpg) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 17: Mẫu Template là gì? ⭐⭐ Trả lời: Trong mẫu Template , một lớp trừu tượng sẽ đưa ra các cách thức/mẫu thức được xác định để thực thi các phương thức của nó. Các lớp con của nó có thể ghi đè lên việc triển khai phương thức theo nhu cầu nhưng việc gọi phải theo cùng cách thức được định nghĩa bởi một lớp trừu tượng. Mẫu này nằm trong danh mục mẫu hành vi . ![9.jpg](/api/v1/media/e79358a1d3e594f5de821c587e3ed774224f1cfda7732109c42945e553c5f2ad.jpg) 🔗 Nguồn: [tutorialspoint.com](https://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm) ## Câu hỏi 18: Mẫu Memento là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 19: Mẫu Abstract Factory là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 20: Sự khác nhau giữa lớp tĩnh và lớp đơn là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 21: Mẫu Prototype là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi22: Adapter Pattern là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 23: Mô hình Bridge là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 24: Khi nào tôi nên sử dụng mẫu thiết kế tổng hợp? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 25: “Lập trình cho giao diện, không phải triển khai” có nghĩa là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 26: Decorator pattern là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 27: Hoa văn Facade là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 28: Bạn có thể giải thích rõ hơn về sự khác biệt giữa Proxy và Decorator không? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 29: Mô hình Chuỗi trách nhiệm là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 30: Mẫu lệnh là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 31: Mẫu Interpreter là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 32: Mô hình Mediator là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 33: Mẫu Observer là gì? ⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 34: Mẫu Bridge khác với mẫu Adapter như thế nào? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 35: Khi nào bạn sẽ sử dụng Builder Pattern? Tại sao không sử dụng Factory Pattern? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 36: Mẫu Flyweight là gì? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 37: Tại sao tôi lại sử dụng Chain of Responsibility thay vì Decorator? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 38: Giải thích cách sử dụng Service Locator Pattern ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 39: Sự khác biệt giữa mẫu thiết kế Strategy và mẫu thiết kế State là gì? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 40: Giải thích Composition over legacy là gì? ⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 41: Giải thích sự khác biệt giữa các mẫu thiết kế Facade, Proxy, Adapter và Decorator? ⭐⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 42: Sự khác biệt giữa các mẫu Dependency Injection và Service Locator là gì? ⭐⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 43: Bạn có thể giải thích sự khác biệt giữa Façade và Mediator không? ⭐⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 44: Sự khác biệt giữa mẫu template và mẫu strategy là gì? ⭐⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) ## Câu hỏi 45: Bạn có thể giải thích "viên kim cương tử thần" là gì không? ⭐⭐⭐⭐⭐ Xem 👉 [Trả lời](https://www.fullstack.cafe/interview-questions/design-patterns) Nguồn bài viết dịch từ - [đây](https://github.com/aershov24/design-patterns-interview-questions)