Python設計模式 七 命令模式

2021-07-22 04:19:31 字數 1335 閱讀 3261

"""命令模式"""

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 命...