Pythonデザインパターン-アダプター

アダプタパターンは、互換性のない2つのインターフェイス間のブリッジとして機能します。このタイプのデザインパターンは、2つの独立したインターフェイスの機能を組み合わせているため、構造パターンに分類されます。

このパターンには、独立したインターフェイスまたは互換性のないインターフェイスの機能を結合する単一のクラスが含まれます。実際の例としては、メモリカードとラップトップの間のアダプタとして機能するカードリーダーの場合があります。メモリカードをカードリーダーに接続し、カードリーダーをラップトップに接続して、ラップトップからメモリカードを読み取れるようにします。

アダプターのデザインパターンは、クラスを一緒に作業するのに役立ちます。要件に基づいて、クラスのインターフェースを別のインターフェースに変換します。このパターンには、1つの名前と複数の形式に名前を付ける多型の種分化が含まれています。収集した要件に従って使用できる形状クラスについて説明します。

アダプタパターンには2つのタイプがあります-

オブジェクトアダプタパターン

このデザインパターンは、オブジェクトの実装に依存しています。したがって、これはオブジェクトアダプタパターンと呼ばれます。

クラスアダプタパターン

これは、アダプタデザインパターンを実装するための代替方法です。このパターンは、多重継承を使用して実装できます。

アダプターパターンを実装する方法は?

ここで、アダプタパターンを実装する方法を見てみましょう。

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

出力

上記のプログラムは次の出力を生成します-

説明

コードには、さまざまなパラメーターと属性を持つアダプターインターフェイスが含まれています。これには、すべての属性を実装し、出力を表示として表示するTargetインターフェースとともにAdapteeが含まれています。