【python + 設計模式】command模式
阿新 • • 發佈:2019-01-25
command模式個人覺得主要的作用就是,將需要執行的action分離並封裝,完成對該類行為的一些類似於command的操作。
比如:執行記錄、統計、撤消、佇列等。
這種模式在python中沒有涉及到啥特殊操作。
""" *TL;DR80 Encapsulates all information needed to perform an action or trigger an event. """ from __future__ import print_function import os from os.path import lexists class MoveFileCommand(object): def__init__(self, src, dest): self.src = src self.dest = dest def execute(self): self.rename(self.src, self.dest) def undo(self): self.rename(self.dest, self.src) def rename(self, src, dest): print(u"renaming %s to %s" % (src, dest)) os.rename(src,dest) def main(): command_stack = [] # commands are just pushed into the command stack command_stack.append(MoveFileCommand('foo.txt', 'bar.txt')) command_stack.append(MoveFileCommand('bar.txt', 'baz.txt')) # verify that none of the target files exist assert(not lexists("foo.txt")) assert(not lexists("bar.txt")) assert(not lexists("baz.txt")) try: with open("foo.txt", "w"): # Creating the file pass # they can be executed later on for cmd in command_stack: cmd.execute() # and can also be undone at will for cmd in reversed(command_stack): cmd.undo() finally: os.unlink("foo.txt") if __name__ == "__main__": main() ### OUTPUT ### # renaming foo.txt to bar.txt # renaming bar.txt to baz.txt # renaming baz.txt to bar.txt # renaming bar.txt to foo.txt