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转载版
  • 相关阅读:
    java(5)流程控制n阶乘各位和
    java(4)运算符
    java(3)
    java(2)
    java(1)
    语音识别,图片识别(1)
    java实现——005从尾到头打印链表
    java实现——004替换空格
    java实现——003二维数组中的查找
    java实现——035第一个只出现一次的字符
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035608.html
Copyright © 2011-2022 走看看