Pola Desain Python - Adaptor

Pola adaptor berfungsi sebagai jembatan antara dua antarmuka yang tidak kompatibel. Jenis pola desain ini berada di bawah pola struktural karena pola ini menggabungkan kemampuan dua antarmuka independen.

Pola ini melibatkan satu kelas, yang bertanggung jawab untuk menggabungkan fungsionalitas antarmuka yang independen atau tidak kompatibel. Contoh kehidupan nyata adalah kasus pembaca kartu, yang bertindak sebagai adaptor antara kartu memori dan laptop. Anda mencolokkan kartu memori ke dalam pembaca kartu dan pembaca kartu ke dalam laptop sehingga kartu memori dapat dibaca melalui laptop.

Pola desain adaptor membantu mengerjakan kelas bersama-sama. Ini mengubah antarmuka kelas menjadi antarmuka lain berdasarkan kebutuhan. Pola tersebut mencakup spesiasi polimorfisme yang menamai satu nama dan beberapa bentuk. Katakanlah untuk kelas bentuk yang dapat digunakan sesuai persyaratan yang dikumpulkan.

Ada dua jenis pola adaptor -

Pola Adaptor Objek

Pola desain ini bergantung pada implementasi objek. Karenanya, ini disebut Pola Adaptor Objek.

Pola Adaptor Kelas

Ini adalah cara alternatif untuk mengimplementasikan pola desain adaptor. Pola tersebut dapat diimplementasikan menggunakan beberapa pewarisan.

Bagaimana cara menerapkan pola adaptor?

Sekarang mari kita lihat bagaimana menerapkan pola adaptor.

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()

Keluaran

Program di atas menghasilkan keluaran berikut -

Penjelasan

Kode tersebut mencakup antarmuka adaptor dengan berbagai parameter dan atribut. Ini termasuk Adaptee bersama dengan antarmuka Target yang mengimplementasikan semua atribut dan menampilkan keluaran sebagai terlihat.