用命令模式實現這樣乙個需求:
有個按鈕,將一盞電燈的開和關動作都繫結在這個按鈕上。另外還有乙個undo按鈕,可撤消之前的乙個動作。
下面這個電燈類,對應上面的圖也就是接收者
package com.headfirst.chapter6;
public class light
public void off()
}
下面這個是具體的命令類,也就是開燈命令
package com.headfirst.chapter6;
public class lightoncommand implements command
public void execute()
public void undo()
}
package com.headfirst.chapter6;
public class lightoffcommand implements command
public void execute()
public void undo()
}
下面這個是invoker
package com.headfirst.chapter6;
public class ******remotecontrol
public void buttonwaspressed()
public void undobuttonwaspressed()
}
測試類
package com.headfirst.chapter6;
public class remotecontroltest
}
最後列印出:
the light is on
the light if off
the light is on
命令模式的定義:將「請求」封裝成物件,以便使用不同的請求,佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。
上面的「佇列或日誌來引數化」的意思是有很多命令,以佇列的方式先後執行。
日誌是指將每個操作動作「命令化」,記錄在日誌中。
Head First 命令模式
這章我們來看下命令模式,從乙個例子開始,我們想做乙個遙控器,這個遙控器可以控制燈 電視 風扇 cd機等等,並且還有乙個撤銷鍵。這裡我們就可以利用命令模式來很好的完成這個遙控器。1.首先客戶負責建立命令物件。命令物件一般有乙個execute函式,代表這個命令要完成的事情 2.客戶把命令放在乙個控制器中...
Head First設計模式1 命令模式
命令模式 通過命令模式,可以使發出請求的物件與被請求的物件都依賴抽象程式設計,而非依賴具體的類,實現了解耦。並且由於較好的封裝了請求,命令模式可以被撤銷。package command inte ce icommand class light public void on public void o...
《Head First設計模式》之命令模式
命令模式就是將方法呼叫 method invocation 封裝起來。通過封裝方法呼叫,我們可以把運算塊包裝成形,所以呼叫此運算的物件不需要關心事情是如何進行的,只要知道如何使用包裝成形的方法來完成它就可以了。通過封裝方法呼叫,可以用在以下場景 記錄日誌或者重複使用這些封裝來實現撤銷 undo 我對...