Các loại Design Pattern mà mọi dân IT cần biết

Ở 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é!

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.

3 loại Design Pattern phổ biến nhất là gì?

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.

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
February 06, 2021
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Tìm hiểu về Dependency Injection

Tìm hiểu về Dependency Injection

Trong bài viết trước về Inversion of Control (IoC), Got It cũng đã đề cập tới khái niệm Dependency Injection (DI). Nhiều kỹ sư vẫn đang gặp khó khăn trong việc phân biệt DI, Dependency Inversion và IoC. Vậy chúng là gì? Hãy cùng tìm hiểu câu trả lời qua bài viết sau nhé! Mục […]
Design Patterns for Dummies: Nhập môn Design Patterns

Design Patterns for Dummies: Nhập môn Design Patterns

Kể từ khi khái niệm Design Patterns được phổ biến nhờ Gang of Four, nhiều cuốn sách về Design Patterns đã ra đời. Design Patterns for Dummies là một ví dụ tiêu biểu. Trong bài viết dưới đây, bạn sẽ được cung cấp các thông tin và review chi tiết về cuốn sách này. Mục lục1. […]
Inversion of control là gì? Tìm hiểu Dependency Inversion

Inversion of control là gì? Tìm hiểu Dependency Inversion

Các khái niệm như Dependency Injection, Dependency Inversion hay Inversion of Control là gì đều là những câu hỏi khó kể cả với những kỹ sư kỳ cựu. Nhiều bạn dù đã đi làm vài năm nhưng vẫn chưa thực sự hiểu rõ về các khái niệm này mà chỉ biết sử dụng chúng trong […]
Design Pattern là gì? Tổng quan về Design Pattern

Design Pattern là gì? Tổng quan về Design Pattern

Một trong những bài học “vỡ lòng” của các lập trình viên là Design Pattern. “Design Pattern là gì?” là câu hỏi đầu tiên khi làm quen với khái niệm này. Hãy cùng tìm hiểu tất tần tật về Design Pattern cùng Got It nhé. Mục lục1. Design Pattern là gì?2. Những nhầm lẫn về […]
Các design pattern thông dụng trong JavaScript

Các design pattern thông dụng trong JavaScript

Các design pattern thông dụng không còn là công cụ xa lạ với giới lập trình viên. Nhờ có chúng, developer tạo được các mã code có thể bảo trì, khả dụng và dễ tái sử dụng, đặc biệt đối với các ứng dụng lớn. Bài viết dưới đây sẽ giúp bạn hiểu thêm về […]
3 lý do các lập trình viên nên học Design Pattern

3 lý do các lập trình viên nên học Design Pattern

Nếu là một lập trình viên, rất khó để bạn tiếp tục phát triển sự nghiệp nếu không học Design Pattern để giải quyết các vấn đề. Bài viết giúp bạn hiểu rõ hơn về định nghĩa của các mẫu thiết kế. Và giải thích lý do tại sao nên học và ứng dụng chúng […]