標籤:lan sig 執行命令 on() signature receiver logs http div
命令模式(Command Pattern):將請求封裝成對象,從而使可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消的操作.
下面是一個命令模式的demo:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = ‘Andy‘ 5 """ 6 大話設計模式 7 設計模式——命令模式 8 命令模式(Command Pattern):將請求封裝成對象,從而使可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消的操作. 9 """10 11 # 命令類12 class Command(object):13 14 def __init__(self, receiver):15 self.receiver = receiver16 17 def execute(self):18 pass19 20 # 執行接收者的操作21 class ConcreteCommand(Command):22 23 def execute(self):24 self.receiver.action()25 26 27 # 接收命令28 class Invoker(object):29 30 def __init__(self):31 self.command = ‘‘32 33 def setcommand(self,command):34 self.command = command35 36 def excutecommand(self):37 self.command.execute()38 39 40 # 具體執行類41 class Receiver(object):42 43 def action(self):44 print "執行請求"45 46 if __name__ == "__main__":47 48 r = Receiver() #建立需要執行的命令49 c = ConcreteCommand(r) # 綁定要執行的命令50 i = Invoker() # 建立命令執行者51 i.setcommand(c) # 接受命令52 i.excutecommand() # 執行命令
上面類的設計如:
優點:
可以較容易的設計一個命令隊列
可以較容易的將命令記入日誌
允許接收請求的一方決定是否要否決請求
可以容易的實現對請求的撤銷和重做
加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易
命令模式最大的優點是 把請求一個操作的對象與知道怎麼執行一個操作的對象分割開
Andy
出處:http://www.cnblogs.com/onepiece-andy/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
大話設計模式Python實現-命令模式