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转载版
  • 相关阅读:
    J Identical Trees(求俩个树转化所需的最小代价,hash判同构,费用流求转移代价)
    I Tournament(俩人一组,构造最少排队总时间)
    D
    purfer序列(有关度数与生成树个数情况)
    博客园自定义样式
    莫比乌斯知识点整理
    随笔日记
    牛客小白月赛16
    Codeforces Round #555 (Div. 3)
    Codeforces Round #553 (Div. 2)
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035608.html
Copyright © 2011-2022 走看看