파이썬에서 디자인 패턴 'Template Method' 배우기
■ Template Method(템플릿 메소드 패턴)
Template Method 패턴(템플릿 메소드 패턴)은 GoF(Gang of Four; 4명의 갱들)에 의해 정의된 디자인 패턴의 하나이다. 「행동에 관한 패턴」에 속한다. Template Method 패턴의 목적은, 어느 처리의 대략적인 알고리즘을 미리 결정해 두고, 그 알고리즘의 구체적인 설계를 서브 클래스에 맡기는 것이다. 따라서 시스템의 프레임 워크를 구축하는 수단으로 잘 활용됩니다.
UML 클래스 diagram
(이상 위키피디아(Wikipedia)에서 인용)
■ "Template Method" 샘플 프로그램
실제로 Template Method 패턴을 활용한 샘플 프로그램을 움직여서 다음과 같은 동작의 모습을 확인하고 싶습니다.
실제로 Template Method 패턴을 활용한 샘플 프로그램을 움직여서 다음과 같은 동작의 모습을 확인하고 싶습니다.
$ python Main.py
<<HHHHH>>
+-------------+
|Hello, World!|
|Hello, World!|
|Hello, World!|
|Hello, World!|
|Hello, World!|
+-------------+
■ 샘플 프로그램에 대해 자세히 알아보기
Git 저장소에도 비슷한 코드가 있습니다.
htps : // 기주 b. 이 m / 싹 / s dy _ f_에서 ㅇ ㄹ
.
├── Main.py
└── templatemethod
├── __init__.py
└── display.py
(1) AbstractClass (추상 클래스)의 역할
AbstractClass
역할은 템플릿 메서드를 구현합니다. 또한 템플릿 메서드에서 사용하는 추상 메서드를 선언합니다. 이 추상 메소드는, 서브 클래스인 ConcreteClass
역에 의해 구현됩니다.샘플 프로그램에서는,
AbstractDisplay
클래스가, 이 역할을 노력합니다.templatemethod/display.py
from abc import ABCMeta, abstractmethod
class AbstractDisplay(metaclass=ABCMeta):
@abstractmethod
def print(self):
pass
@abstractmethod
def open(self):
pass
@abstractmethod
def close(self):
pass
def display(self):
self.open()
for _ in range(5):
self.print()
self.close()
(2) ConcreteClass (구상 클래스)의 역할
AbstractClass
역할로 정의 된 추상 클래스를 구체적으로 구현합니다. 여기서 구현한 메서드는 AbstractClass
역할의 템플릿 메서드에서 호출됩니다.샘플 프로그램에서는,
CharDisplay
클래스와, StringDisplay
클래스가, 이 역할을 노력합니다.templatemethod/display.py
class CharDisplay(AbstractDisplay):
def __init__(self, ch):
self.__ch = ch
def open(self):
print('<<', end='')
def print(self):
print(self.__ch, end='')
def close(self):
print('>>')
class StringDisplay(AbstractDisplay):
def __init__(self, string):
self.__string = string
self.__width = len(string)
def open(self):
self.__printLine()
def print(self):
print("|{0}|".format(self.__string))
def close(self):
self.__printLine()
def __printLine(self):
print('+', end='')
for _ in range(self.__width):
print('-', end='')
print('+')
(3) Client(이용자)의 역할
샘플 프로그램에서는,
startMain
메소드가, 이 역할을 노력합니다.Main.py
from templatemethod.display import CharDisplay, StringDisplay
def startMain():
d1 = CharDisplay('H')
d2 = StringDisplay("Hello, World!")
d1.display()
print("")
d2.display()
if __name__ == '__main__':
startMain()
■ 참고 URL
Reference
이 문제에 관하여(파이썬에서 디자인 패턴 'Template Method' 배우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ttsubo/items/475ac4810ae44c0ea1bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)