設計模式 行為型模式,命令模式(11)

2022-03-27 17:32:55 字數 2389 閱讀 6550

命令模式(command pattern)是一種資料驅動的設計模式,它屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該命令的合適的物件,並把該命令傳給相應的物件,該物件執行命令。

現在多數應用都有撤銷操作。雖然難以想象,但在很多年裡,任何軟體中確實都不存在撤銷

操作。撤銷操作是在2023年引入的(請參考網頁[t.cn/rqr3n22]),但fortran和lisp分別早在1957

年和2023年就已建立了撤銷操作(請參考網頁[t.cn/rqr3067]),這兩門語言仍在被人廣泛使用。

在那些年裡,我真心不想使用應用軟體。犯了乙個錯誤,使用者也沒什麼便捷方式能修正它。

import

osverbose =true

class

renamefile:

def__init__

(self, path_src, path_dest):

self.src, self.dest =path_src, path_dest

defexecute(self):

ifverbose:

print("

[renaming '{}' to '{}']

".format(self.src, self.dest))

os.rename(self.src, self.dest)

defundo(self):

ifverbose:

print("

[renaming '{}' back to '{}']

".format(self.dest, self.src))

os.rename(self.dest, self.src)

class

createfile:

def__init__(self, path, txt='

hello world\n'):

self.path, self.txt =path, txt

defexecute(self):

ifverbose:

print("

[creating file '{}']

".format(self.path))

with open(self.path, mode='

w', encoding='

utf-8

') as out_file:

out_file.write(self.txt)

defundo(self):

delete_file(self.path)

class

readfile:

def__init__

(self, path):

self.path =path

defexecute(self):

ifverbose:

print("

[reading file '{}']

".format(self.path))

with open(self.path, mode='

r', encoding='

utf-8

') as in_file:

print(in_file.read(), end=''

)def

delete_file(path):

ifverbose:

print("

deleting file '{}'

".format(path))

os.remove(path)

defmain():

orig_name, new_name = '

file1

', '

file2

'commands =

for cmd in

createfile(orig_name), readfile(orig_name), renamefile(orig_name, new_name):

[c.execute()

for c in

commands]

answer = input('

reverse the executed commands? [y/n] ')

if answer notin'

yy':

print("

the result is {}

".format(new_name))

exit()

for c in

reversed(commands):

try:

c.undo()

except

attributeerror as e:

pass

if__name__ == '

__main__':

main()

設計模式 行為型模式 命令模式

將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存 傳遞 呼叫 增加和管理。優點通過引入中介軟體 抽象介面 降低系統的耦合度 擴充套件性良好,增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,即滿足 開閉原則...

設計模式 行為型模式 命令模式

設計模式 行為型模式 命令模式 以乙個mis系統為栗子 mis 管理資訊系統 management information system,mis 是乙個以人為主導的,利用計算機硬體 軟體和網路裝置,進行資訊的收集 傳遞 儲存 加工 整理的系統,以提高組織的經營效率。如下 public abstrac...

設計模式 行為型模式

行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...