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ị.