python 命令模式 设计模式_Python 设计模式——命令模式
命令模式是一種行為設計模式??梢杂脕韺崿F比如安裝軟件時的安裝向導功能,通常安裝向導會通過多個步驟根據用戶的選擇了解用戶的偏好。安裝向導首先啟動一個名為 Command 的對象,用于存儲在向導的多個步驟中用戶指定的選項。當用戶在最后一個步驟中點擊完成按鈕時,Command 對象就會運行 execute() 方法,該方法會考察所有存儲的選項并完成相應的安裝過程。
UML
命令模式通常包含以下術語:
Command 對象了解 Receiver 對象的情況,并能調用其方法
調用者(Invoker)方法的參數值存儲在 Command 對象中
調用者知道如何執行命令
客戶端(Client)用來創建 Command 對象并設置其接收者
命令模式的主要意圖:
將請求封裝為對象
可用不同的請求對客戶端進行參數化
允許將請求保存在隊列中
提供面向對象的回調
命令模式的適用場景:
根據需要執行的操作對對象進行參數化
將操作添加到隊列并在不同地點執行請求
創建一個結構根據較小的操作來完成高級操作
代碼示例
from abc import ABCMeta, abstractmethod
class Order(metaclass=ABCMeta):
@abstractmethod
def execute(self):
pass
class BuyStockOrder(Order):
def __init__(self, stock):
self.stock = stock
def execute(self):
self.stock.buy()
class SellStockOrder(Order):
def __init__(self, stock):
self.stock = stock
def execute(self):
self.stock.sell()
class Agent:
def __init__(self):
self.__orderQueue = []
def placeOrder(self, order):
self.__orderQueue.append(order)
order.execute()
class StockTrade:
def buy(self):
print("You will buy stocks")
def sell(self):
print("You will sell stocks")
if __name__ == '__main__':
stock = StockTrade()
buyStock = BuyStockOrder(stock)
sellStock = SellStockOrder(stock)
agent = Agent()
agent.placeOrder(buyStock)
agent.placeOrder(sellStock)
# => You will buy stocks
# => You will sell stocks
Order 類 -> Command 對象
BuyStockOrder 和 SellStockOrder 類 -> ConcreteCommand 對象,為交易系統定義適當的操作
StockTrade 類 -> Receiver 對象,定義了多個方法(動作)可以被 ConcreteCommand 調用以買入或賣出股票
Agent 類 -> Invoker 對象,作為客戶端和 StockTrade 的中介,執行客戶下達的訂單
命令模式的優點:
將調用操作的類與知道如何執行該操作的類解耦
借助隊列系統,可以創建一系列命令
添加新命令更加容易,無需更改現有代碼
可以使用命令模式定義回滾系統
命令模式的缺點:
為了實現目標,需要大量的類和對象進行協作
每個單獨的命令都是一個 ConcreteCommand 類,增加了實現和維護的成本
總結
以上是生活随笔為你收集整理的python 命令模式 设计模式_Python 设计模式——命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讲讲我对比特币和区块链的认知,挖矿不难,
- 下一篇: anaconda下载jupyter写py