파이썬에서 디자인 패턴 "Adapter"를 배우십시오.
■ Adapter(어댑터 패턴)
Adapter 패턴(어댑터 패턴)은 GoF(Gang of Four; 4명의 갱들)에 의해 정의된 디자인 패턴의 하나이다. Adapter 패턴을 사용하면, 기존의 클래스에 대해서 수정을 가하지 않고, 인터페이스를 변경할 수 있다. Adapter 패턴을 실현하기 위한 수법으로서 "계승을 이용한 수법"과 "위양을 이용한 수법"이 존재한다.
UML 클래스 diagram
1. 상속을 이용한 Adapter
상속을 이용한 Adapter는, 이용하고 싶은 클래스의 서브 클래스를 작성해, 그 서브 클래스에 대해서 필요한 인터페이스를 구현하는 것으로 실현된다.
2. 위양을 이용한 Adapter
위양을 이용한 Adapter는, 이용하고 싶은 클래스의 인스턴스를 생성해, 그 인스턴스를 다른 클래스로부터 이용하는 것으로 실현된다.
(이상 위키피디아(Wikipedia)에서 인용)
■ "Adapter" 샘플 프로그램
실제로 Adapter 패턴을 활용한 샘플 프로그램을 움직여서 다음과 같은 동작의 모습을 확인하고 싶습니다.
실제로 Adapter 패턴을 활용한 샘플 프로그램을 움직여서 다음과 같은 동작의 모습을 확인하고 싶습니다.
$ python Main.py
(Hello)
*Hello*
■ 샘플 프로그램에 대해 자세히 알아보기
Git 저장소에도 비슷한 코드가 있습니다.
htps : // 기주 b. 이 m / 싹 / s dy_ 오 f_로 해 응 _ 파테 r
.
├── Main.py
└── adapter
├── __init__.py
├── banner.py
├── print.py
└── print_banner.py
(1) Target(대상)의 역할
Target
역할은 인스턴스 동작과 관련된 인터페이스를 결정합니다.샘플 프로그램에서는,
Print
클래스가, 이 역할을 노력합니다.adapter/print.py
from abc import ABCMeta, abstractmethod
class Print(metaclass=ABCMeta):
@abstractmethod
def printWeak(self):
pass
@abstractmethod
def printStrng(self):
pass
(2) Client(의뢰자)의 역할
Target
역의 메소드를 사용해, 일을 하는 역입니다.샘플 프로그램에서는,
startMain
메소드가, 이 역할을 노력합니다.Main.py
from adapter.print_banner import PrintBanner
def startMain():
p = PrintBanner("Hello")
p.printWeak()
p.printStrng()
if __name__ == '__main__':
startMain()
(3) Adaptee(적합되는 측)의 역할
Adapter
역할 속에서 실제로 동작하는 메소드를, 여기에서 구현합니다.샘플 프로그램에서는,
Banner
클래스가, 이 역할을 노력합니다.adapter/banner.py
class Banner(object):
def __init__(self, string):
self.__string = string
def showWithParen(self):
print("({0})".format(self.__string))
def showWithAster(self):
print("*{0}*".format(self.__string))
(4) Adapter(적합하는 측)의 역할
Adapter
역은, Target
역의 인터페이스를 구현하고 있는 클래스입니다.샘플 프로그램에서는,
PrintBanner
클래스가, 이 역할을 노력합니다.Adapter 패턴을 실현하기 위한 기법으로서, 다음의 2개의 기법이 존재합니다.
□ 상속을 이용한 샘플 프로그램
adapter/print_banner.py
from adapter.banner import Banner
from adapter.print import Print
class PrintBanner(Banner, Print):
def __init__(self, string):
super(PrintBanner, self).__init__(string)
def printWeak(self):
self.showWithParen()
def printStrng(self):
self.showWithAster()
□ 위양을 이용한 샘플 프로그램
adapter/print_banner.py
from adapter.banner import Banner
from adapter.print import Print
class PrintBanner(Print):
def __init__(self, string):
self.__banner = Banner(string)
def printWeak(self):
self.__banner.showWithParen()
def printStrng(self):
self.__banner.showWithAster()
■ 참고 URL
Reference
이 문제에 관하여(파이썬에서 디자인 패턴 "Adapter"를 배우십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ttsubo/items/d999f8dc2446c2aa30fb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)