Adapter Design Pattern – Structrual Pattern nên biết

2 min read

adapter design pattern

Giới thiệu

Adapter Design Pattern là một loại Pattern rất dễ hiểu và thường xuất hiện trong cả phần mềm và cuộc sống hàng ngày. Để giải thích cách hoạt động của Pattern này, chúng ta có thể sử dụng ngôn ngữ rất đơn giản và liên quan đến cuộc sống hàng ngày. Dưới đây là một số ví dụ về Adapter trong cuộc sống thực tế:

  • Để sạc điện thoại, chúng ta sử dụng dây sạc kèm theo một cục “Adapter” để cắm vào ổ điện.
  • Để kết nối máy tính Mac mới với màn hình thông qua cổng HDMI, chúng ta cần một “Adapter” để chuyển đổi tín hiệu.
  • Khi muốn dùng các thiết bị điện từ châu Âu ở Việt Nam, chúng ta cần một “Adapter” để chuyển đổi cấu trúc ổ cắm.
  • Để sử dụng tai nghe jack 3.5mm trên iPhone mới, chúng ta cần một “Adapter” để chuyển đổi sang cổng Lightning.

Như vậy, Adapter ở bản chất là một công cụ giúp nối kết hai thành phần không tương thích lại với nhau, để chúng có thể giao tiếp và làm việc cùng nhau.

Định nghĩa

Adapter Design Pattern được định nghĩa như sau:

Chuyển đổi giao diện của một class thành giao diện của class khác mà client mong đợi. Adapter cho phép các class làm việc cùng nhau mà không cần thay đổi do không tương thích về giao diện.

Nói một cách đơn giản, Adapter giúp hai class hoạt động cùng nhau dù chúng có giao diện không tương thích, bằng cách cung cấp một lớp trung gian để thực hiện chuyển đổi giao diện.

Cài đặt

Giả sử chúng ta có hai class là MacbookMonitor:

# Define the Macbook class
class Macbook:
    def __init__(self):
        self.port = "USBC"

    def display_on_screen(self):
        # Display through USB connection
        pass

# Define the Monitor class
class Monitor:
    def __init__(self):
        self.port = "HDMI"

    def render(self):
        # TODO: Rendering logic
        pass

Chúng ta muốn kết nối một Macbook với một Monitor bằng cách sử dụng một Adapter. Dưới đây là cách triển khai:

# Define the HDMIAdapter class
class HDMIAdapter:
    def __init__(self, macbook):
        self.macbook = macbook

    def render(self):
        self.macbook.display_on_screen()  # Simulated logic

# Create instances of Macbook and Monitor
macbook = Macbook()
monitor = Monitor()

# Create an instance of HDMIAdapter and connect the Macbook to the Monitor
hdmi_adapter = HDMIAdapter(macbook)
hdmi_adapter.render()

Kết luận

Adapter giúp kết nối và giao tiếp giữa hai module hoặc class không tương thích mà không cần thay đổi chúng. Điều này tuân theo nguyên tắc “Open-Closed Principle” trong nguyên tắc SOLID. Nhưng cũng cần lưu ý rằng, dựa vào mục đích và tình huống sử dụng, bạn có thể tiếp cận Adapter Pattern theo cách khác nhau. Nếu bạn làm việc với các thư viện bên ngoài hoặc các framework, Adapter có thể là một giải pháp tốt để tương thích với chúng. Tuy nhiên, với mã nguồn riêng của bạn, có thể tùy thuộc vào hoàn cảnh mà bạn quyết định sử dụng hoặc không sử dụng Adapter.

R: https://viblo.asia/p/adapter-design-pattern-tro-thu-dac-luc-cua-developers-Az45bqYQlxY

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *