設計模式之十三 命令模式

2021-10-07 08:48:07 字數 1753 閱讀 9836

命令模式:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或者記錄請求日誌,以及支援可撤銷操作。

命令模式的優點:

能夠容易設計乙個命令佇列

在需要情況下,可以較容易地將命令記入日誌

允許接收請求的一方決定是否可以否決請求

可以輕易實現請求撤銷和重做

符合開閉原則

from abc import abcmeta, abstractmethod

class

command

(metaclass=abcmeta)

:def

__init__

(self, chief)

: self.chief = chief

@abstractmethod

defexecute

(self)

:pass

class

bakemuttoncommand

(command)

:def

execute

(self)

: self.chief.execute_bake_mutton(

)class

bakechickenwingcommand

(command)

:def

execute

(self)

: self.chief.execute_bake_chicken_wing(

)class

chief

:def

__init__

(self, name)

: self.name = name

defexecute_bake_mutton

(self)

:print

(" cope with order bake_mutton"

.format

(self.name)

)def

execute_bake_chicken_wing

(self)

:print

(" cope with order bake_chicken_wing"

.format

(self.name)

)class

waiter

:def

__init__

(self)

: self.order =

defset_order

(self, command)

:def

notify

(self)

:for command in self.order:

command.execute(

)if __name__ ==

"__main__"

: chief = chief(

"li"

) waitress = waiter(

) mutton_command = bakemuttoncommand(chief)

chicken_wing_command = bakechickenwingcommand(chief)

waitress.set_order(mutton_command)

waitress.set_order(chicken_wing_command)

waitress.notify(

)

設計模式之十三 命令模式

定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操 思考 說實話我有點懵,沒太懂這個模式在解決什麼問題。好像是要解耦?就是請求者跟執行者的解耦。網上文章中,用得最多的就是顧客點餐,小二傳餐,廚師做餐的例子。我想了一下,如果要憑空實現這...

設計模式之狀態模式(十三)

當乙個物件的內在狀態改版的時候,允許改變其行為,這個物件看起來像是改變了其類。簡單來說就是我們在程式設計的時候可能會根據物件的狀態去寫很多的判斷語句if else。那麼狀態模式就是將判斷的語句封裝到乙個物件中,這樣對於擴充套件和改變狀態的判斷都非常的方便。汽車我們都知道有油箱,但是對於油箱還有多少的...

《設計模式》之十三 策略模式

strategy pattern 策略模式是一種比較簡單的模式,其定義如下 define a family of algorithms,encapsulate each one,and make them interchangeable 定義一組演算法,將每個演算法封裝起來,並且使它們可以互換 通用...