Python設計模式-命令模式
Python設計模式-命令模式
程式碼基於3.5.2,程式碼如下;
#coding:utf-8
#命令模式
class barbecuer():
def bakeButton(self):
print("烤羊肉")
def chickenButton(self):
print("烤雞翅")
class command():
def __init__(self,receive):
self.receive = receive
def excuteComand(self):
raise NotImplementedError
class bakeCommand(command):
def excuteComand(self):
self.receive.bakeButton()
class chickenCommand(command):
def excuteComand(self):
self.receive.chickenButton()
class waiter():
def __init__(self):
self.commandList = []
def add(self,command):
self.commandList.append(command)
def remove(self,command):
self.commandList.remove(command)
def inotify(self):
for command in self.commandList:
command.excuteComand()
if __name__ == "__main__":
recv = barbecuer()
bc = bakeCommand(recv)
cc = chickenCommand(recv)
bc1 = bakeCommand(recv)
w = waiter()
w.add(bc)
w.add(cc)
w.add(bc1)
w.inotify()
命令模式的分析與解讀
命令模式
命令模式,將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數優化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
程式碼解讀
1、先定義了barbecuer類,為命令的執行者,分別擁有兩個執行的方法,bakeButton和chickenButton,後續下達的命令只能在這兩個方法中進行選擇;
2、定義了command類,所以繼承自該類的類必須實現excuteComand方法,並在初始化時,傳入命令執行者的物件;
3、定義了繼承自command類的bakeCommand和chickenCommand類,該命令分別對贏命令執行者barbecuer的兩個方法,烤肉和烤雞翅;
4、通過定義waiter類,來對繼承自command類的類進行增加或刪除的管理,waiter類通過inotify方法來實現對命令的執行。
程式碼執行結果如下:
”’
烤羊肉
烤雞翅
烤羊肉
”’
命令模式應用場景:
1、觸發-反饋機制的系統,都可以使用命令模式思想,如基於管道結構的命令系統,GUI系統中的操作反饋。
優缺點分析
優點
1、低耦合,呼叫者和接受者之間沒有什麼直接關係,通過命令中的execute介面聯絡;
2、擴充套件性好,新命令容易加入,也容易拼出組合命令;
3、可以容易的實現對請求的撤銷和重做;
4、允許接手請求的一方決定是否要否決請求。
缺點
1、如果業務場景中命令比較多,那麼對應命令類和命令物件的數量也會增加,這樣系統會膨脹的很大。
備註
class Command():
def __init__(self,receiver):
self.receiver = receiver
def execute(self):
raise NotImplementedError
class ConcreteCommand(Command):
def execute(self):
self.receiver.action()
class Receiver():
def action(self):
print("receiver actiono")
class Invoker():
def setCommand(self,command):
self.command = command
def executeCommand(self):
self.command.execute()
if __name__ == "__main__":
receiver = Receiver()
cm = ConcreteCommand(receiver)
ik = Invoker()
ik.setCommand(cm)
ik.executeCommand()
相關文章
- Python 設計模式-命令模式Python設計模式
- 設計模式--命令模式設計模式
- js設計模式–命令模式JS設計模式
- Java設計模式——命令模式Java設計模式
- js設計模式--命令模式JS設計模式
- 設計模式(五):命令模式設計模式
- 設計模式之-命令模式設計模式
- 設計模式之命令模式設計模式
- 設計模式-命令模式(Command)設計模式
- 設計模式系列 6– 命令模式設計模式
- JavaScript設計模式(七):命令模式JavaScript設計模式
- 簡說設計模式——命令模式設計模式
- Javascript設計模式之命令模式JavaScript設計模式
- Java設計模式(16)----------命令模式Java設計模式
- 設計模式實戰 - 命令模式設計模式
- 極簡設計模式-命令模式設計模式
- GoLang設計模式08 - 命令模式Golang設計模式
- JAVA設計模式之命令模式Java設計模式
- 大話設計模式—命令模式設計模式
- Java設計模式(22)命令模式(Command模式)Java設計模式
- JAVA設計模式之 13.命令設計模式Java設計模式
- C++ 設計模式之命令模式C++設計模式
- 設計模式漫談之命令模式設計模式
- javascript設計模式 之 6 命令模式JavaScript設計模式
- 設計模式系列 6-- 命令模式設計模式
- C#設計模式之命令模式C#設計模式
- 設計模式——18命令模式(Command)設計模式
- 23種設計模式之命令模式設計模式
- 我學設計模式 之 命令模式設計模式
- c/c++設計模式----命令模式C++設計模式
- Python設計模式-策略模式Python設計模式
- Python設計模式-代理模式Python設計模式
- 通俗 Python 設計模式——原型設計模式Python設計模式原型
- 設計模式(十四)命令設計模式
- 設計模式(十九)----行為型模式之命令模式設計模式
- 折騰Java設計模式之命令模式Java設計模式
- 設計模式——命令模式實現撤銷設計模式
- 14.java設計模式之命令模式Java設計模式