LoginSignup
2
3

More than 5 years have passed since last update.

【デザインパターン】Strategy

Posted at

はじめに

おそばせながら、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が出力されている。
想定通りの挙動が確認できたのでとりあえずはよかった。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3