"""命令模式"""
import os
from os.path import lexists
class
movefilecommand
(object):
def__init__
(self, src, dest):
self.src = src
self.dest = dest
defexecute
(self):
self.rename(self.src, self.dest)
defundo
(self):
self.rename(self.dest, self.src)
defrename
(self, src, dest):
print('重新命名 {} to {}'.format(src, dest))
"""os.rename() 方法用於命名檔案或目錄,從 src 到 dst,如果dst是乙個存在的目錄, 將丟擲oserror。
src -- 要修改的目錄名
dst -- 修改後的目錄名
"""os.rename(src, dest)
defmain
(): command_stack =
# 命令只是壓入命令棧
# 確認沒有任何目標檔案的存在
assert(not lexists("foo.txt"))
assert(not lexists("bar.txt"))
assert(not lexists("baz.txt"))
try:
with open("foo.txt", "w"): # 建立檔案
pass
#它們可以稍後執行
for cmd in command_stack:
cmd.execute()
#並且也可以隨意撤消
"""reversed()倒排列表中的元素"""
for cmd in reversed(command_stack):
cmd.undo()
finally:
"""os.unlink() 方法用於刪除檔案,如果檔案是乙個目錄則返回乙個錯誤。"""
os.unlink("foo.txt")
if __name__ == "__main__":
#print("目錄為: %s" % os.listdir(os.getcwd()))
設計模式系列漫談之七 命令模式
小雪的故事暫停,欲知後事如何,請等下回再編!現在改編另乙個故事。故事 小時候,我夢想自己成為一名真正的軍人,對軍營生活充滿著嚮往.軍人的豪氣,軍人的英姿總給人無限遐想。閒暇之餘,我喜歡看看軍事題材的電視劇集,包括 和平年代 歷史的天空 沙場點兵 中國近衛軍 垂直打擊 石破天驚 鐵色高原 今年一部電視...
python設計模式(十六) 命令模式
行為請求者 與 行為實現者 通常呈現一種 緊耦合 但在某些場合,比如要對行為進行 記錄 撤銷 重做 事務 等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將 行為請求者 與 行為實現者 解耦?將一組行為抽象為物件,實現二者之間的松耦合。這就是命令模式 command pattern 命...
python設計模式(十六) 命令模式
行為請求者 與 行為實現者 通常呈現一種 緊耦合 但在某些場合,比如要對行為進行 記錄 撤銷 重做 事務 等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將 行為請求者 與 行為實現者 解耦?將一組行為抽象為物件,實現二者之間的松耦合。這就是命令模式 command pattern 命...