Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- python sorted
- 파이썬 알고리즘 풀기
- 파이썬 릿코드
- 릿코드
- 파이썬 알고리즘
- 파이썬릿코드
- leetcode 풀기
- python priority queue
- python 알고리즘
- leetcode풀이
- 파이썬알고리즘풀기
- 릿코드 파이썬
- 알고리즘풀기
- LeetCode
- 코틀린기초
- 릿코드풀기
- 상가수익률계산기
- 파이썬릿코드풀기
- python 릿코드
- python xor
- leetcode풀기
- 알고리즘풀이
- 파이썬알고리즘
- 릿코드풀이
- binary search
- 파이썬 프로그래머스
- python zip_longest
- python Leetcode
- 릿코드 풀기
- 잇츠디모
Archives
- Today
- Total
소프트웨어에 대한 모든 것
[디자인패턴][Template Method] 템플릿 메소드 패턴 본문
반응형
템플릿 메소드 정의
- 알고리즘의 골격만 정의하고 각 단계에 대한 구체적인 처리는 서브클래스에게 위임하는 패턴
- 행동 패턴 중 하나로 굉장히 자주 사용하는 패턴 중 하나
템플릿 메소드 패턴은
슈퍼클래스에서 알고리즘 뼈대만 작성하고,
서브클래스에서 구체적인 구현을 재정의하는 패턴
템플릿 메소드 클래스 다이어그램
템플릿 메소드 활용
Pizza의 go() 함수가 템플릿 메소드(알고리즘 골격)에 해당하고, Pizza를 상속받은 NYPizza, KoreaPizza 클래스가 있습니다. NYPizza는 뉴욕 스타일로 피자를 만들어야 하기 때문에 prepare(), cook(), eat() 함수를 재정의 합니다. KoreaPizza 또한 한국식에 맞게 함수를 재정의 합니다.
결국 피자를 만들기 위한 뼈대만 Pizza 클래스에 정의하고 피자를 만드는 방법의 구체적인 처리는 서브클래스에게 위임하는 패턴이 템플릿 메소드 패턴입니다.
from abc import abstractmethod
class Pizza:
def go(self):
""" template metod """
self.prepare()
self.cook()
self.eat()
@abstractmethod
def prepare(self):
pass
@abstractmethod
def cook(self):
pass
@abstractmethod
def eat(self):
pass
class NYPizza(Pizza):
def prepare(self):
print('Prepare NewYork Style Pizza')
print('밀가루 도우 준비')
def cook(self):
print('Cook NYPizza')
print('Add onions')
print('Add ham')
def eat(self):
print("NYPizza 시식")
class KoreaPizza(Pizza):
def prepare(self):
print('Prepare Korea Style Pizza')
print('쌀가루 도우 준비')
def cook(self):
print('Cook KoreaPizza')
print('Add garlics')
print('Add 불고기')
def eat(self):
print("KoreaPizza 시식")
ny_pizza = NYPizza()
ny_pizza.go()
korea_pizza = KoreaPizza()
korea_pizza.go()
출력
Prepare NewYork Style Pizza
밀가루 도우 준비
Cook NYPizza
Add onions
Add ham
NYPizza 시식
Prepare Korea Style Pizza
쌀가루 도우 준비
Cook KoreaPizza
Add garlics
Add 불고기
KoreaPizza 시식
참고 자료
https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_template.htm
https://stackabuse.com/template-method-design-pattern-in-python/
https://sbcode.net/python/template/
반응형
'시스템 설계 및 디자인 > 디자인 패턴' 카테고리의 다른 글
[ 디자인패턴][Builder] 빌더 패턴 (0) | 2022.03.25 |
---|---|
[디자인패턴][Bridge] 브릿지 패턴 (0) | 2022.03.25 |
[디자인패턴][Abstract Factory] 추상 팩토리 패턴 (0) | 2022.03.25 |
[디자인패턴][Mediator] 중재자 패턴 (0) | 2022.03.24 |
[디자인패턴][Observer] 옵저버 패턴 (0) | 2022.03.24 |
Comments