PythonでCommandパターンを実装する
『Rubyによるデザインパターン』は、デザインパターンの使いどころや各パターンの意図を順を追って説明してくれるので、読みやすい良本でした。
- 作者: Russ Olsen,ラス・オルセン,小林健一,菅野裕,吉野雅人,山岸夢人,小島努
- 出版社/メーカー: ピアソン桐原
- 発売日: 2009/04/01
- メディア: 単行本
- 購入: 13人 クリック: 220回
- この商品を含むブログ (64件) を見る
数多くの操作を蓄え、それらを一気に実行させたい、といった処理をするときは、Command パターンが役に立つ一例となります。Python で実装すると以下のようになります。実行した処理を戻したい場合は、更に Undo 処理を実装することになります。
#!/usr/bin/env python class Command(): def execute(): pass class CompositeCommand(Command): def __init__(self): self.__cmd_list = [] def append_cmd(self, cmd): self.__cmd_list.append(cmd) def execute(self): for cmd in self.__cmd_list: cmd.execute() class FileTouchCommand(Command): def __init__(self, path): self.__path = path def execute(self): cmd = "touch %s" % (self.__path) print cmd class ChmodCommand(Command): def __init__(self, path, permission): self.__path = path self.__permission = permission def execute(self): cmd = "chmod %s %s" % (self.__permission, self.__path) print cmd if __name__ == "__main__": cc = CompositeCommand() # コマンドを組み立てる cc.append_cmd(FileTouchCommand("/tmp/test")) cc.append_cmd(ChmodCommand("/tmp/test", "600")) # 組み立てたコマンドを実行する cc.execute()