😊
PythonでTemplateMethodパターンを書いてみた
Pythonとデザインパターンを勉強中なので、TemplateMethodパターンをPythonで書いてみました。
TemplateMethodパターンとは
テンプレートとなるスーパークラスと、そのクラスを実際に実装するサブクラスで形成されるデザインパターン。処理の枠組みと具体的な処理内容を分担させることで、スーパークラスを各サブクラスで継承した時に一貫性を保つことができる。同じクラスを継承しているのでまた、詳細な処理をサブクラスに任せているため拡張性が高い。
コード
from abc import ABC, abstractmethod
def client():
charDisplay = CharDisplay("A")
stringDisplay = StringDisplay("AAAA")
charDisplay.display()
stringDisplay.display()
#スーパークラス
#pythonではABCをインポートすることで抽象クラスを使用できる
class AbstractDisplay(ABC):
@abstractmethod
def open(self):
pass
@abstractmethod
def print(self):
pass
@abstractmethod
def close(self):
pass
def display(self):
self.open()
for i in range(5):
self.print()
self.close()
#サブクラス
class CharDisplay(AbstractDisplay):
charWord = None
def __init__(self, ch):
self.charWord = ch
def open(self):
print("<<")
def print(self):
print(self.charWord)
def close(self):
print(">>")
#サブクラス
class StringDisplay(AbstractDisplay):
stringWord = None
width = None
def __init__(self, str):
self.stringWord = str
self.width = len(str)
def open(self):
self.printLine()
def print(self):
print(self.stringWord)
def close(self):
self.printLine()
def printLine(self):
print("+", end="")
for i in range(self.width):
print("-",end="")
print("+")
if __name__ == "__main__":
client()
Discussion