Mẫu thiết kế Python - Bộ điều hợp
Mẫu bộ điều hợp hoạt động như một cầu nối giữa hai giao diện không tương thích. Loại mẫu thiết kế này thuộc mẫu cấu trúc vì mẫu này kết hợp khả năng của hai giao diện độc lập.
Mẫu này liên quan đến một lớp duy nhất, có nhiệm vụ tham gia các chức năng của các giao diện độc lập hoặc không tương thích. Một ví dụ thực tế có thể là trường hợp của đầu đọc thẻ, hoạt động như một bộ chuyển đổi giữa thẻ nhớ và máy tính xách tay. Bạn cắm thẻ nhớ vào đầu đọc thẻ và đầu đọc thẻ vào laptop để thẻ nhớ đọc qua laptop.
Mẫu thiết kế bộ điều hợp giúp làm việc các lớp với nhau. Nó chuyển đổi giao diện của một lớp thành một giao diện khác dựa trên yêu cầu. Mẫu bao gồm một đặc tả là một dạng đa hình có tên một tên và nhiều dạng. Nói cho một lớp hình dạng có thể sử dụng theo các yêu cầu được thu thập.
Có hai loại mẫu bộ điều hợp -
Mẫu bộ điều hợp đối tượng
Mẫu thiết kế này dựa vào việc triển khai đối tượng. Do đó, nó được gọi là Object Adapter Pattern.
Mẫu bộ điều hợp lớp
Đây là một cách thay thế để triển khai mẫu thiết kế bộ điều hợp. Mẫu có thể được thực hiện bằng cách sử dụng nhiều kế thừa.
Làm thế nào để triển khai mẫu bộ điều hợp?
Bây giờ chúng ta hãy xem cách triển khai mẫu bộ điều hợp.
class EuropeanSocketInterface:
def voltage(self): pass
def live(self): pass
def neutral(self): pass
def earth(self): pass
# Adaptee
class Socket(EuropeanSocketInterface):
def voltage(self):
return 230
def live(self):
return 1
def neutral(self):
return -1
def earth(self):
return 0
# Target interface
class USASocketInterface:
def voltage(self): pass
def live(self): pass
def neutral(self): pass
# The Adapter
class Adapter(USASocketInterface):
__socket = None
def __init__(self, socket):
self.__socket = socket
def voltage(self):
return 110
def live(self):
return self.__socket.live()
def neutral(self):
return self.__socket.neutral()
# Client
class ElectricKettle:
__power = None
def __init__(self, power):
self.__power = power
def boil(self):
if self.__power.voltage() > 110:
print "Kettle on fire!"
else:
if self.__power.live() == 1 and \
self.__power.neutral() == -1:
print "Coffee time!"
else:
print "No power."
def main():
# Plug in
socket = Socket()
adapter = Adapter(socket)
kettle = ElectricKettle(adapter)
# Make coffee
kettle.boil()
return 0
if __name__ == "__main__":
main()
Đầu ra
Chương trình trên tạo ra kết quả sau:
Giải trình
Mã bao gồm giao diện bộ điều hợp với các thông số và thuộc tính khác nhau. Nó bao gồm Adaptee cùng với giao diện Target thực hiện tất cả các thuộc tính và hiển thị đầu ra dưới dạng hiển thị.