Suy nghĩ trong anh về mẫu thiết kế “Adapter Pattern” (Phần 1)

Khi nhắc đến Adapter bạn nghĩ tới điều gì? Đó là cục nằm giữa 2 cái đầu cắm hay nó là miếng gắn thẻ nhớ vào cắm vào máy tính beated

Capture

Đúng là như vậy nhưng khi đi vào lĩnh vực lập trình và cụ thể ở đây là Design Pattern thì Adapter có nghĩ là bộ chuyển đổi trung gian.

  • Định nghĩ về Adapter Pattern:
    Adapter Pattern là pattern giữ vai trò trung gian giữa hai lớp, chuyển đổi giao diện của một hay nhiều lớp có sẵn thành một giao diện khác, thích hợp cho lớp đang viết. Điều này giúp các lớp có interface không tương thích có thể làm việc với nhau.
    – Adapter còn có tên gọi khác là Wrapper
    – Adapter thuộc nhóm cấu trúc mẫu Structural Pattern
  • Vậy mục đích sử dụng của Adapter Pattern là gì?
    – Chuyển đổi interface có sẵn thành một interface khác thích hợp cho class hiện tại
    – Tái sử dụng lại interface có sẵn để giảm thiểu việc viết lại code vẫn đảm bảo yêu cầu
    – Xây dựng, mở rộng các phương thức của lớp có sẵn để phù hợp với yêu cầu
  • Các thành phần tham gia vào mẫu thiết kế Adapter:
    Capture– Client: Đây là lớp sẽ sử dụng đối tượng của bạn (đối tượng mà bạn muốn chuyển đổi giao diện).
    – Adaptee: Đây là những lớp bạn muốn lớp Client sử dụng, nhưng hiện thời giao diện của nó không phù hợp.
    – Adapter: Đây là lớp trung gian, thực hiện việc chuyển đổi giao diện cho Adaptee và kết nối Adaptee với Client.
    – Target: định nghĩa giao diện đang làm việc (domain specific).

  • Cách thức hoạt động của Adapter Pattern: Định nghĩa một lớp Adapter riêng biệt chuyển đổi interface (không tương thích) của một lớp (Adaptee) thành một interface (Target) yêu cầu => Thông qua Adapter để làm việc với các lớp (tái sử dụng) mà không cần có interface yêu cầu.
  • Phân loại Adapter Pattern:
    Capture

    Object Adapter Pattern Class Adapter Pattern
    Để một Adapter đơn lẻ làm việc với nhiều Adaptee ( có thể là chính adaptee đó hoặc tất cả lớp con của adaptee đó) Chuyển đổi Adaptee sang Target bằng việc ủy thác tới các lớp Adapter cụ thể. Như một hệ quả, một lớp sẽ không làm việc khi chúng ta muốn chuyển đổi một lớp và tất cả lớp con của nó.
    Khó khăn hơn trong việc override các hành vi của Adapee, nó cũng yêu cầu lớp con Adaptee và để cho Adapter hướng đến các lớp con thay vì chính  Adaptee Dễ dàng để Adapter override hành vi của Adaptee vì Adapter là lớp con của Adaptee
    Adapter có thể thêm chức năng tới tất cả các Adaptee cùng một lúc Chỉ cho phép một đối tượng và không cần thêm một con trỏ nào khác để chuyển đến Adaptee

    Capture

  • Lĩnh vực áp dụng của mẫu thiết kế:
    – Một hệ thống lớn luôn luôn sử dụng, kết nối đến các thư viện bên ngoài hoặc API, vì thế chúng ta nên áp dụng Adapter Pattern cài đặt các method adapter. Áp dụng tốt pattern này sẽ giúp hệ thống không xảy ra xự cố khi mà API hay bên thứ ba có sự thay đổi code
    – Sử dụng khi code của bạn phải phụ thuộc vào class khác mà có sự thay đổi một cách thường xuyên trong class đó để đáp ứng yêu cầu đặt ra.
  • Vậy ưu nhược điểm của mẫu Adapter Pattern so với mẫu khác là gì?
    • Ưu điểm:
      – Linh động trong việc chuyển đổi các giao diện- Nếu chương trình hiện tại không thể thêm trực tiếp module thì có thể sử dụng mẫu để chuyển đổi thêm gián tiếp
      – Mẫu sử dụng phổ biến trong việc vận hành các API, thư viện bên ngoài
    • Nhược điểm:
      – Cần nhiều sự kết hợp từ lớp Client, Adapter, Adaptee cho việc chuyển đổi giao diện trên 1 module nào đó
  • Các vấn đề đặt ra của mẫu Adapter Pattern:
    • Adapter có thể điều chỉnh bao nhiêu chuyển đổi?
    • Pluggable adapters
    • Sử dụng Adapter hai chiều cho việc sử dụng xuyên suốt chương trình
  • Các mẫu thiết kế có liên quan với Adapter Pattern:
    • Bridge
    • Decorator
    • Proxy

Hai phần cuối là các vấn đề đặt ra của mẫu và các mẫu thiết kế liên quan với Adapter Pattern khá phức tạp khó hiểu nên mình sẽ trình bày trong bài viết tiếp theo. Phần 2 mình cũng sẽ đi vào demo ví dụ cho các bạn luôn nên mình mong phần lý thuyết này các bạn nắm chắc để cùng qua phần 2 thực hành nhé. Cảm ơn các bạn đã đọc và theo dõi bài viết dựa trên bài thuyết trình của nhóm mình và dựa trên Ebook: Design Patterns – Elements of Reusable Object-Oriented Software . Các bạn cùng đón chờ phần 2 về Adapter Pattern nhé!

Advertisements