The adapter pattern is a software design pattern that allows the interface of an existing class to be used as another interface. It is often used to make existing classes work with others without modifying their source code.
Một pattern Adapter là một mô hình thiết kế phần mềm cho phép giao diện của một lớp hiện có được sử dụng như một giao diện khác. Nó thường được sử dụng để làm cho các lớp hiện có làm việc với các lớp khác mà không cần sửa đổi mã nguồn của chúng.
Ví dụ: Bạn có 1 hệ thống thanh toán trực tuyến đang dùng bình thường, chấp nhận thẻ, chuyển khoản.... 1 ngày đẹp trời sếp bạn muốn tích hợp thêm paypal. Bạn không muốn code thêm vào code cũ chút nào vì đang chạy ngon lành ổn định nhiều năm nay. Lúc này Adapter Pattern chính là cứu tinh của bạn
# Target interface
class PaymentGateway:
def process_payment(self, amount):
print(f"Processing tradition Gateway payment of ${amount}")
# Adaptee class
class PayPal:
def make_payment(self, amount):
print(f"Processing PayPal payment of ${amount}")
# Adapter class
class PayPalAdapter(PaymentGateway):
def __init__(self, paypal):
self.paypal = paypal
def process_payment(self, amount):
self.paypal.make_payment(amount)
# Client code
def make_payment(payment_gateway, amount):
payment_gateway.process_payment(amount)
# Create an instance of the Adaptee
paypal = PayPal()
# Create an instance of the Adapter, passing the Adaptee to its constructor
paypal_adapter = PayPalAdapter(paypal)
# Call the client code with the Adapter
make_payment(paypal_adapter, 100.0) # OUTPUT: Processing PayPal payment of $100.0
# Create an instance of the Target
traditional_gw = PaymentGateway()
# Call the client code with the Target
make_payment(traditional_gw,100) # Processing tradition Gateway payment of $100