zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【行为模式Behavioral】command

    Python版

    https://github.com/faif/python-patterns/blob/master/behavioral/command.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    *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
    Python转载版
  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035608.html
Copyright © 2011-2022 走看看