Python-design-patterns-adapter

提供:Dev Guides
移動先:案内検索

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

出力

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

アダプターパターン

説明

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