Python設(shè)計模式之命令模式原理與用法實例分析
本文實例講述了Python設(shè)計模式之命令模式原理與用法。分享給大家供大家參考,具體如下:
命令模式(Command Pattern):將請求封裝成對象,從而使可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作.
下面是一個命令模式的demo:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大話設(shè)計模式 設(shè)計模式——命令模式 命令模式(Command Pattern):將請求封裝成對象,從而使可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作. """ # 命令類 class Command(object): def __init__(self, receiver): self.receiver = receiver def execute(self): pass # 執(zhí)行接收者的操作 class ConcreteCommand(Command): def execute(self): self.receiver.action() # 接收命令 class Invoker(object): def __init__(self): self.command = '' def setcommand(self,command): self.command = command def excutecommand(self): self.command.execute() # 具體執(zhí)行類 class Receiver(object): def action(self): print "執(zhí)行請求" if __name__ == "__main__": r = Receiver() #創(chuàng)建需要執(zhí)行的命令 c = ConcreteCommand(r) # 綁定要執(zhí)行的命令 i = Invoker() # 創(chuàng)建命令執(zhí)行者 i.setcommand(c) # 接受命令 i.excutecommand() # 執(zhí)行命令
上面類的設(shè)計如下圖:
優(yōu)點:
可以較容易的設(shè)計一個命令隊列
可以較容易的將命令記入日志
允許接收請求的一方?jīng)Q定是否要否決請求
可以容易的實現(xiàn)對請求的撤銷和重做
加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易
命令模式最大的優(yōu)點是 把請求一個操作的對象與知道怎么執(zhí)行一個操作的對象分割開
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Django REST Framework序列化外鍵獲取外鍵的值方法
今天小編就為大家分享一篇Django REST Framework序列化外鍵獲取外鍵的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python中使用matplotlib繪制mqtt數(shù)據(jù)實時圖像功能
這篇文章主要介紹了Python中使用matplotlib繪制mqtt數(shù)據(jù)實時圖像,本代碼中publish是一個死循環(huán),數(shù)據(jù)一直往外發(fā)送,詳細代碼跟隨小編一起通過本文學(xué)習(xí)下吧2021-09-09Python常見數(shù)據(jù)結(jié)構(gòu)詳解
這篇文章主要介紹了Python常見數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2014-07-07pandas數(shù)據(jù)合并與重塑之merge詳解
這篇文章主要介紹了pandas數(shù)據(jù)合并與重塑之merge,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02