Design Pattern là gì? Design Pattern trong Java.
Trong mấy bài về Framework có mấy bạn hỏi sao dùng @Inject 1 cái là dùng được đối tượng mà không cần khởi tạo hay mấy cái Factory là cái gì…
Mấy cái đấy liên quan đến Design pattern nên hôm nay mình sẽ 1 mấy bài về design pattern để mọi người dễ dàng hơn khi sử dụng các Framework.
1. Design Pattern là gì?
Trong kỹ thuật phần mềm, design pattern (mẫu thiết kế) là một giải pháp lặp lại nói chung cho một vấn đề thường xảy ra trong thiết kế phần mềm.
Một mẫu thiết kế không phải là một ngôn ngữ hay thiết kế hoàn chỉnh có thể được chuyển trực tiếp thành mã. Nó là một mô tả hoặc mẫu cho cách giải quyết vấn đề có thể được sử dụng trong nhiều tình huống khác nhau.
Design pattern rất phổ biến trong phát triển phần mềm, nó được áp dụng sẵn trong các Framework, các thư viện, và nếu trước đó bạn chưa biết khái niệm design pattern là gì thì rất có thể bạn đã áp dụng nó rồi nhưng không nhận ra đó thôi!
Design Pattern là gì? Design Pattern trong Java 2
2. Lợi ích của Design Pattern (Mẫu thiết kế).
Một số lợi ích của việc sử dụng các mẫu thiết kế là:
- Các mẫu thiết kế đã được xác định và cung cấp cách tiếp cận chuẩn theo ngành để giải quyết vấn đề lặp lại, vì vậy sẽ tiết kiệm được thời gian nếu chúng ta sử dụng mẫu thiết kế hợp lý.
- Sử dụng các mẫu thiết kế thúc đẩy khả năng tái sử dụng dẫn đến phát triển phần mềm nhanh hơn. Nó giúp giảm tổng chi phí của sản phẩm phần mềm.
- Khi áp dụng 1 mẫu thiết kế, nó làm cho code dễ hiểu và gỡ lỗi.
Ví dụ: khi xây nhà thì người ta sẽ áp dụng những bộ khung (nhà ống, nhà vuông…) để dễ xây, tiết kiệm, phù hợp phong thủy… Thì khi làm phần mềm người ta sẽ xem yêu cầu để áp dụng những mẫu đã dùng trước đó xem có cái nào phù hợp không, vì dựa trên những mẫu cũ ta đã có được những kinh nghiệm để làm phần mềm nhanh hơn, dễ mở rộng, bảo trì hơn.
Design Pattern là gì? Design Pattern trong Java 3
3. Các loại Design Pattern
Design Pattern được chia làm 3 loại là mẫu tạo dựng, mẫu cấu trúc, mẫu hành vi.
Ở bài này mình sẽ liệt kê những mẫu hay dùng nhất và code ví dụ nó bằng Java.
Mẫu tạo dựng (Creational Design Patterns)
Các mẫu tạo dựng cung cấp giải pháp tạo một đối tượng theo cách tốt nhất phù hợp cho từng tính huống, bao gồm:
Mẫu cấu trúc (Structural Design Patterns)
Mẫu cấu trúc cung cấp các giải pháp tạo ra cấu trúc của một lớp (class), ví dụ dùng thừa kế để tạo một class lớn từ các class bé, bao gồm:
- Adapter Pattern
- Composite Pattern
- Proxy Pattern
- Flyweight Pattern
- Facade Pattern
- Bridge Pattern
- Decorator Pattern
Mẫu hành vi (Behavioral Design Patterns)
Các mẫu hành vi cung cấp các giải pháp cho sự tương tác giữa các class, làm sao để lose couple, high cohension, tăng tính mở rộng. Bao gồm:
- Template Method Pattern
- Mediator Pattern
- Chain of Responsibility Pattern
- Observer Pattern
- Strategy Pattern
- Command Pattern
- State Pattern
- Visitor Pattern
- Interpreter Pattern
- Iterator Pattern
- Memento Pattern
Một số mẫu thiết kế khác:
- Dependency Injection
- Thread Safety in Java Singleton
* Lưu ý: Các mô hình UML của từng design pattern khi áp dụng trong thực tế có thể nó sẽ khác một chút, có thể thiếu class nay, interface kia nhưng cấu trúc của nó vấn không thay đổi.
Ví dụ như mô hình MVC cũng có MVC 1,2… Một thành phần lúc thì hoạt động giống Model, lúc thì hoạt động giống View, lúc thì kiêm cả 2 chức năng Control và View…
References:
https://sourcemaking.com/design_patterns
https://www.journaldev.com/1827/java-design-patterns-example-tutorial