Command Pattern是一種行為型設計模式,它提供了一種將動作封裝成物件的方式,從而允許操作與其執行的物件解耦。這種模式的核心思想是將一個操作的相關數據以及對象封裝在一起,形成一個命令對象,該對象可以用於執行操作或撤銷該操作。
例如,一個文本編輯器可以用Command Pattern來實現「撤銷」和「重做」功能。當用戶在編輯器中進行某些操作(如刪除一個字母),該操作被封裝成一個命令對象。隨後,該命令對象被存儲在一個命令歷史記錄中。如果用戶想要撤銷進行的操作,編輯器可以簡單地從命令歷史記錄中拿出最新的命令對象並執行它。如果用戶想要重做撤銷的操作,編輯器可以從命令歷史記錄中拿出上一個命令對象並執行它。
另一個例子是一個遙控器,它可以用Command Pattern來實現不同的遙控操作。例如,一個遙控器可能包含控制音量的按鈕和控制頻道的按鈕。當按下音量按鈕時,遙控器將創建一個專門用於增加音量的命令對象。隨後,該命令對象將被儲存到命令歷史紀錄中。同樣地,當按下控制頻道的按鈕時,遙控器將創建一個專門用於更改頻道的命令對象。這些命令對象可以儲存在命令歷史紀錄中,以供後續執行或撤銷。
答案:創建一個遙控器的Command介面,用於定義execute()方法。讓每個設備都實現Command介面,同時實現其各自的方法。最終,遙控器內部將有一個可迭代的命令列表,可以設置、刪除和調整這些命令。
答案:創建一個Command介面,其中定義execute()和undo()方法。每個技能和攻擊都是一個具體的Command對象,每個角色都實現Command介面並實現其各自的方法。然後,遊戲方面可以使用這些命令在角色控制面板上創建一個命令列表。
答案:創建一個Command介面,其中定義execute()和undo()方法。然後,每個命令如複製、貼上和刪除都是一個具體的Command對象。內部命令模式使用命令模式,其中具體命令可以使用遞歸檢查特定文件或文件夾中的所有文件。
答案:為每種菜品創建一個Command介面,其中定義execute()方法。服務員將菜單項目映射到每個Command對象,並且能夠添加和刪除訂單。每個Command對象都存儲了菜品的名稱和數量,廚師可以查看這個列表並開始準備菜品。最終,收銀員將運行整個訂單列表並計算總價格。
答案:為每個操作(訂單、付款、發貨、退貨)創建一個Command介面,其中定義execute()和undo()方法。控制器可以將這些命令添加到一個可迭代列表中,並且可以反過來運行列表以取消訂單。為了處理退貨流程,可以使用不同的Command介面,其中還包括額外的方法如validate()和approve()。