Python 디자인 패턴-어댑터

어댑터 패턴은 호환되지 않는 두 인터페이스 간의 브리지 역할을합니다. 이 유형의 디자인 패턴은 두 개의 독립적 인 인터페이스의 기능을 결합하기 때문에 구조적 패턴을 따릅니다.

이 패턴은 독립적이거나 호환되지 않는 인터페이스의 기능을 결합하는 단일 클래스를 포함합니다. 실제 사례로는 메모리 카드와 노트북 사이의 어댑터 역할을하는 카드 리더가 있습니다. 노트북을 통해 메모리 카드를 읽을 수 있도록 메모리 카드를 카드 리더기에 연결하고 카드 리더를 노트북에 연결합니다.

어댑터 디자인 패턴은 클래스를 함께 작업하는 데 도움이됩니다. 요구 사항에 따라 클래스의 인터페이스를 다른 인터페이스로 변환합니다. 이 패턴은 하나의 이름과 여러 형태를 명명하는 다형성 종을 포함합니다. 수집 된 요구 사항에 따라 사용할 수있는 모양 클래스를 말합니다.

어댑터 패턴에는 두 가지 유형이 있습니다.

개체 어댑터 패턴

이 디자인 패턴은 객체 구현에 의존합니다. 따라서이를 Object Adapter Pattern이라고합니다.

클래스 어댑터 패턴

이것은 어댑터 디자인 패턴을 구현하는 다른 방법입니다. 패턴은 다중 상속을 사용하여 구현할 수 있습니다.

어댑터 패턴을 구현하는 방법은 무엇입니까?

이제 어댑터 패턴을 구현하는 방법을 살펴 보겠습니다.

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를 포함합니다.