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インターフェイスが含まれています。