Chương 9 — Adapter Pattern

Adapter pattern — giới thiệu

Adapter pattern là gì?

Key idea 1: Vấn đề trong thực tế

Trong quá trình phát triển phần mềm, thường gặp hai loại vấn đề tương thích:

Vấn đề 1: Data incompatibility

Hệ thống A gửi dữ liệu dạng XML. Nhưng thư viện bên ngoài chỉ nhận dữ liệu dạng JSON.

Hai bên không thể giao tiếp trực tiếp.

Vấn đề 2: Interface incompatibility

Một thư viện cũ có Rectangle(x, y, width, height).

Phần còn lại của hệ thống đang dùng Rectangle(top_left, bottom_right).

Hai interface không khớp nhau.

Key idea 2: Giải pháp — Adapter

Adapter là một class trung gian nằm giữa hai class không tương thích.

Nó:

  • Nhận dữ liệu theo dạng mà client đang dùng
  • Chuyển đổi sang dạng mà service cần
  • Trả kết quả về cho client
Client --> Adapter --> Service

Client không biết Service tồn tại. Client không biết Adapter đang chuyển đổi gì. Client chỉ gọi interface quen thuộc.

Key idea 3: Ví dụ thực tế dễ hiểu

Hãy nghĩ đến một ổ cắm điện ở Việt Nam (2 lỗ tròn) và một thiết bị của Mỹ (2 lỗ dẹt).

Bạn không sửa thiết bị. Bạn không sửa ổ cắm. Bạn dùng một bộ chuyển đổi (adapter).

Trong lập trình cũng vậy — Adapter Pattern cho phép tích hợp các thành phần không tương thích mà không cần sửa đổi chúng.

Key idea 4: Khi nào nên dùng Adapter?

Dùng Adapter khi:

  • Cần tích hợp với code/thư viện bên ngoài mà không thể sửa đổi
  • Có class cũ (legacy code) không phù hợp với interface mới nhưng vẫn cần dùng
  • Muốn tái sử dụng class hiện có dù interface của nó không khớp

Không nên dùng Adapter khi có thể sửa trực tiếp source code — đó là giải pháp đơn giản hơn.

Đăng ký nhận Newsletter
Cập nhật bài viết mới nhất!