Skip to content

Instantly share code, notes, and snippets.

@atsuya046
Created February 12, 2014 04:44
Show Gist options
  • Save atsuya046/8950184 to your computer and use it in GitHub Desktop.
Save atsuya046/8950184 to your computer and use it in GitHub Desktop.
GoF design pattern - Command
# -*- coding: utf-8 -*-
import os
class MoveFileCommand(object):
def __init__(self, src, dest):
self.src = src
self.dest = dest
def execute(self):
self()
def __call__(self):
print("renaming {} to {}".format(self.src, self.dest))
os.rename(self.src, self.dest)
def undo(self):
print("renaming {} to {}".format(self.dest, self.src))
os.rename(self.dest, self.src)
def main():
command_stack = []
# commands are jsust pushed into the command stack
command_stack.append(MoveFileCommand("foo.txt", "bar.txt"))
command_stack.append(MoveFileCommand("bar.txt", "baz.txt"))
for cmd in command_stack:
cmd.execute()
for cmd in reversed(command_stack):
cmd.undo()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment