はじめに
おそばせながら、Pythonで開発するにあたって、デザインパターンってどうやって導入するか疑問になったので試しにstrategyを使ったサンプルを作成してみた。
サンプル
あるべき姿としては、1クラス1ファイルの形でまとめるべきと考えていますが、
ここでは、省略して1つのファイルで記述します。
概略だけメモ程度に残しておくと、、、
処理を管理者ユーザーと一般ユーザーで分けたいなぁと考えて調べてみました。
strategySample.py
#coding: utf-8
from abc import ABCMeta, abstractmethod
def main():
manager = Person(ManagerStrategy())
manager.execute()
normal = Person(NormalStrategy())
normal.execute()
class Person:
def __init__(self, strategy):
self.strategy = strategy
def execute(self):
return self.strategy.execute()
class Strategy(metaclass=ABCMeta):
@abstractmethod
def execute(self):
pass
class ManagerStrategy(Strategy):
def __init__(self):
pass
def execute(self):
print("ManageStrategy")
class NormalStrategy(Strategy):
def __init__(self):
pass
def execute(self):
print("NormalStrategy")
if __name__=="__main__":
main()
実行結果は以下のようになりました。
ManageStrategy
NormalStrategy
管理者と一般でどちらもexecute()
ロジックを実行しているが、
管理者(manager)ではManageStrategy
が出力され、
一般(normal)ではNormalStrategy
が出力されている。
想定通りの挙動が確認できたのでとりあえずはよかった。