Python 100Days Challenge Day26
Templateメソッドについて学んだのでまとめていく。
概要
簡単にいうと、大まかな手順は親が決めて、詳細の処理は子が実装する親子関係がある考え方のデザインパターン
- スーパークラス(親)で処理の骨組みを定義する
- 具体的な処理の部分はサブクラス(子)に任せる
では、実際にコードを書いてみる。
Template Methodで料理をつくる
スーパークラスで料理を作る手順を決めて、具体的な料理(スパゲッティやカレーなど)の作り方をサブクラスで実装してみる。
- Cookingクラスをスーパークラスとする
- cookメソッドで料理の手順を決める
- 材料を準備する
- 料理をする
- 料理をお皿に盛り付ける
- cookメソッドで料理の手順を決める
- prepare_ingredientsメソッドとcook_dishメソッドをサブクラスで定義する
- それぞれスパゲッティとカレーの具体的な作り方を実装
- prepare_ingredientsで仕込みの準備をする、という表現になるらしい
- それぞれスパゲッティとカレーの具体的な作り方を実装
# スーパークラス
class Cooking:
def cook(self):
self.prepare_ingredients()
self.cook_dish()
self.serve()
def prepare_ingredients(self):
raise NotImplemenedError("このメソッドはサブクラスで実装してください")
def cook_dish(self):
raise NotImplemenedError("このメソッドはサブクラスで実装してください")
def serve(self):
print("料理をお皿に盛り付ける")
# スパゲッティを作るサブクラス
class Spaghetti(Cooking):
def prepare_ingredients(self):
print("スパゲッティ、トマトソース、野菜を準備する")
def cook_dish(self):
print("スパゲッティを茹でて、トマトソースと混ぜる")
# カレーを作るサブクラス
class Curry(Cooking):
def prepare_ingredients(self):
print("カレー粉、お肉、野菜を準備する")
def cook_dish(self):
print("お肉と野菜を炒めて、カレー粉と水を加えて煮込む")
# 作ってみる
if __name__ == "__main__":
# スパゲッティを作る
spaghetti = Spaghetti()
spaghetti.cook()
print()
# カレーを作る
curry = Curry()
curry.cook()
>
スパゲッティ、トマトソース、野菜を準備する
スパゲッティを茹でて、トマトソースと混ぜる
料理をお皿に盛り付ける
カレー粉、お肉、野菜を準備する
お肉と野菜を炒めて、カレー粉と水を加えて煮込む
料理をお皿に盛り付ける
この書き方結構見やすい。