テンプレートメソッドパターンは、スーパークラスでアルゴリズムの骨組みを定義し、サブクラスでその詳細を実装するデザインパターンです。このパターンにより、アルゴリズムの一貫性を保ちながら、サブクラスの振る舞いを変更することができます。
テンプレートメソッドパターンは主に次の2つのコンポーネントで構成されます。
以下に、テンプレートメソッドパターンを使った簡単なサンプルコードを示します。この例では、コーヒーを作るプロセスとお茶を作るプロセスを示しています。
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()
を呼び出すと、お茶を作るための手順が実行されます。このように、テンプレートメソッドパターンを使用することで、共通の処理を抽象化し、異なるサブクラスで具体的な処理を実装することができます。これにより、コードの再利用性が向上し、メンテナンスが容易になります。