Ở các bài trước, chúng ta đã được tìm hiểu về khái niệm Design Pattern cũng như cách sử dụng chúng hợp lý. Trong bài viết này, hãy cùng Got It Vietnam đi sâu vào các loại Design Pattern phổ biến nhất nhé!
Mục lục
3 loại Design Pattern phổ biến nhất
Theo cuốn “kinh thánh” về Design Pattern: “Design patterns Elements of Reusable Object Oriented Software”, có 3 loại Design Pattern chính:
- Creational Pattern (nhóm khởi tạo – 5 mẫu) gồm: Factory Method, Abstract Factory, Singleton, Builder, Prototype. Nhóm này sẽ tập trung vào việc thực thể hoá các nhóm đối tượng (class insantiation). Trong Java nói riêng và trong lập trình hướng đối tượng nói chung thì class được hiểu là một nhóm các đối tượng có các đặc điểm chung
- Structural Pattern (nhóm cấu trúc – 5 mẫu) gồm: Adapter, Bridge, Composite, Decorator, Facade, Flyweight và Proxy. Nhóm này chủ yếu làm việc với cấu tạo của class và object. Nó được sử dụng để hình thành và định nghĩa quan hệ giữa các đối tượng
- Behavioural Pattern ( nhóm hành vi/ tương tác – 11 mẫu): Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này tập trung chính vào sự giao tiếp giữa các object trong cùng 1 class
Bài viết này sẽ trình bày đại diện mỗi nhóm trên một phương pháp chính.
Phương pháp Factory trong Creational Pattern
Factory Method là gì?
Factory Method Design Pattern hay thường được gọi là Factory Pattern là một trong những Pattern thuộc nhóm Creational Pattern. Nhiệm vụ của Factory Pattern là quản lý và trả về các đối tượng theo yêu cầu, giúp cho việc khởi tạo đổi tượng một cách linh hoạt hơn.
Nói 1 cách dễ hiểu thì Factory Pattern là một công xưởng và sẽ “sản xuất” các đối tượng theo yêu cầu của chúng ta. Phương pháp này được sử dụng khi chúng ta có 1 class mẹ (super-class) và nhiều class con (sub-class), sau đó dựa trên đầu vào chúng ta phải trả về một class con tương ứng.
Sử dụng Factory Method như thế nào?
Factory Method được sử dụng khi chúng ta có 1 class mẹ và nhiều class con, sau đó chúng ta phải trả về kết quả 1 sub-class dựa trên đầu vào. Ngoài ra, Factory Method có thể được sử dụng trong trường hợp chúng ta không biết liệu tương lai có cần thêm sub-class nữa không. Do đó, khi cần mở rộng, chúng ta có thể tạo một 1 sub-class và sử dụng Factory Method để triển khai sub-class này.
Factory Method bao gồm những phần nào?
Một Factory Pattern bao gồm các thành phần cơ bản sau:
- Super Class: một supper class trong Factory Pattern có thể là một interface, abstract class hay một class thông thường
- Sub Classes: mỗi sub class sẽ có nhiệm vụ riêng và chúng sẽ implement các phương thức của super class theo nhiệm vụ đó
- Factory Class: một class chịu tránh nhiệm khởi tạo các đối tượng sub class dựa theo tham số đầu vào
Adapter Pattern trong Structural Pattern
Hiểu nôm na thì Adapter Pattern là một pattern cho phép các interface không liên quan với nhau vẫn có thể làm việc được với nhau. Đối tượng kết nối các interface này được gọi là Adapter. Sử dụng Adapter cho phép các class có các interface khác nhau có thể dễ dàng giao tiếp thông qua adapter interface mà không cần thay đổi code của các lớp.
Adapter Pattern bao gồm những phần nào?
Theo trang GPcoder.com, một Adapter Pattern bao gồm các thành phần cơ bản sau:
- Adaptee: định nghĩa interface không tương thích, cần được tích hợp vào
- Adapter: lớp tích hợp, giúp interface không tương thích tích hợp được với interface đang làm việc. Thực hiện việc chuyển đổi interface cho Adaptee và kết nối Adaptee với Client
- Target: một interface chứa các chức năng được sử dụng bởi Client (domain specific)
- Client: class sử dụng các đối tượng có interface Target
Ưu và nhược điểm của việc sử dụng Adapter Method
Ưu điểm của việc sử dụng Adapter Pattern
- Sử dụng Adapter Pattern giúp các đối tượng có Interface khác nhau có thể làm việc và giao tiếp được với nhau
- Trong lập trình hướng đối tượng, việc sử dụng Adapter Pattern giúp tăng khả năng sử dụng lại thư viện với interface không thay đổi, do bản thân Adapter Pattern không có mã nguồn
Nhược điểm của việc sử dụng Adapter Pattern
Ngoài những ưu điểm kể trên, Adapter Pattern còn có một vài nhược điểm như sau:
- Do phải tạo thêm nhiều interface adapter nên chi phí sử dụng có thể sẽ cao hơn
- Đôi khi quá trình thiết kế adapter rất phức tạp, nhiều trường hợp cần đến một chuỗi adapter trước khi giải quyết được vấn đề
Interpreter Pattern trong Behavioural Pattern
Interpreter Pattern là gì?
Nghĩa của từ “interpreter” có nghĩa là thông dịch do đó một cách dễ hiểu thì Interpreter Pattern giúp người lập trình có thể phát triển những đối tượng “động” bằng cách đọc mô tả về đối tượng rồi sau đó “xây dựng” đối tượng đúng theo mô tả đó.
Tuy nhiên, Interpreter Pattern có phạm vi sử dụng khá hạn chế, chủ yếu được sử dụng để định nghĩa các bộ ngữ pháp đơn giản (grammar), hoặc một vài luật lệ đơn giản (rules). Một vài ứng dụng của Interpreter Pattern có thể kể đến như bộ chuyển số La Mã thành chữ số thập phân, hoặc được ứng dụng bên trong các máy tính Casio thông thường để thực hiện phép tính.
Lợi ích của Interpreter Pattern
- Dễ dàng thay đổi và sử dụng bộ ngữ pháp. Do Interpreter Pattern sử dụng các class để thể hiện các quy tắc ngữ pháp, chúng ta có thể sử dụng tính thừa kế để thay đổi hoặc mở rộng các quy tắc đó. Các biểu thức hiện tại có thể được thay đổi và các biểu thức mới có thể được định nghĩa lại các thay đổi trên biểu thức cũ
- Cài đặt và sử dụng ngữ pháp rất đơn giản. Các class trong Pattern này dễ viết và có thể được tự động hoá bằng trình biên dịch hoặc trình phân tích ngữ pháp
Hy vọng qua bài viết này, Got It Vietnam đã cung cấp cho các bạn thêm nhiều thông tin bổ ích về các loại design pattern và một vài ưu nhược điểm của chúng.