Section 3 / 13
テンプレートメソッドパターン
テンプレートメソッドパターンは、スーパークラスでアルゴリズムの骨組みを定義し、サブクラスでその詳細を実装するデザインパターンです。このパターンにより、アルゴリズムの一貫性を保ちながら、サブクラスの振る舞いを変更することができます。
テンプレートメソッドパターンの構成
テンプレートメソッドパターンは主に次の2つのコンポーネントで構成されます。
- 抽象クラス(Template Class): アルゴリズムの骨組みを定義します。具体的な処理はサブクラスで実装されます。
- サブクラス(Concrete Class): 抽象クラスの定義に基づいて、アルゴリズムの具体的な処理を実装します。
サンプルコード
以下に、テンプレートメソッドパターンを使った簡単なサンプルコードを示します。この例では、コーヒーを作るプロセスとお茶を作るプロセスを示しています。
from abc import ABC, abstractmethod
class CaffeineBeverage(ABC):
def prepare_recipe(self):
self.boil_water()
self.brew()
self.pour_in_cup()
self.add_condiments()
@abstractmethod
def brew(self):
pass
@abstractmethod
def add_condiments(self):
pass
def boil_water(self):
print("お湯を沸かしています...")
def pour_in_cup(self):
print("カップに注いでいます...")
class Coffee(CaffeineBeverage):
def brew(self):
print("コーヒーをドリップしています...")
def add_condiments(self):
print("砂糖とミルクを加えています...")
class Tea(CaffeineBeverage):
def brew(self):
print("お茶を浸しています...")
def add_condiments(self):
print("レモンを加えています...")
# 使用例
coffee = Coffee()
coffee.prepare_recipe()
print("\n")
tea = Tea()
tea.prepare_recipe()
コードの解説
抽象クラス CaffeineBeverage
CaffeineBeverageは抽象クラスで、prepare_recipeメソッドを定義しています。- このメソッドでは、コーヒーまたはお茶を作るための基本的な手順を定義しています。
brewとadd_condimentsメソッドは抽象メソッドとして定義されており、サブクラスで実装される必要があります。
サブクラス Coffee と Tea
CoffeeクラスはCaffeineBeverageを継承し、brewメソッドでコーヒーをドリップする処理を実装しています。また、add_condimentsメソッドで砂糖とミルクを加えています。Teaクラスも同様にCaffeineBeverageを継承し、brewメソッドでお茶を浸す処理を実装し、add_condimentsメソッドでレモンを加えています。
実行例
coffee.prepare_recipe()を呼び出すと、コーヒーを作るための手順が実行され、各メソッドが呼ばれます。tea.prepare_recipe()を呼び出すと、お茶を作るための手順が実行されます。
このように、テンプレートメソッドパターンを使用することで、共通の処理を抽象化し、異なるサブクラスで具体的な処理を実装することができます。これにより、コードの再利用性が向上し、メンテナンスが容易になります。