《命令模式》PPT課件
《《命令模式》PPT課件》由會員分享,可在線閱讀,更多相關(guān)《《命令模式》PPT課件(43頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1 第 十 一 章 命 令 模 式家 電 自 動 化 遙 控 器 的 API遙 控 器 有 七 個 可 編 程 的 插 槽 (每 個 控 制 一 個 不 同 的 家 電自 動 化 裝 置 ), 每 個 插 槽 有 對 應(yīng) 的 開 (on)/關(guān) (off)按 鈕 ; 有 一個 撤 消 (undo)按 鈕 。有 一 組 Java類 , 這 些 類 是 由 多 家 廠 商 開 發(fā) 出 來 的 , 用來 控 制 家 電 裝 置 , 例 如 電 燈 、 風(fēng) 扇 、 熱 水 器 、 音 響 設(shè) 備 等 。 2 七 個 插 槽 具 備 各 自 的“ 開 ” 和 “ 關(guān) ” 按 鈕 。有 七 個 插 槽 需
2、要編 程 。 每 個 插 槽 控 制 不 同 的 裝 置 。 寫 上 要 控 制的 裝 置 名 稱 。 共 用 的 撤 消 按 鈕 。 控 制 一 號插 槽 ???制 二 號插 槽 。 .依 次 類 推 。遙 控器 3 ApplianceControlStereoCeilingLight OutdoorLightGardenLight CeilingFan Sprinkler LightGarageDoor TV FaucetControlHottub ThermostatSecurityControl on()off() on()off() on()off() on()off()dim()
3、openValue()closeValue() setTemperature()arm()disarm()waterOn()waterOff() on()off()setCd()setDvd().on() off()setInputChannel(). setDuskTime()setDawnTime()manualOn() . high()medium()low()off() . up()down()stop()lightOn() . circulate()jetsOn()jetsOff() . 廠 商類 噴 頭 立 體 聲 音 響 水 龍 頭熱 水 器 恒 溫 器廚 具 控 制 4 家 電
4、 自 動 化 遙 控 器 的 API(續(xù) )目 標(biāo) : 創(chuàng) 建 一 組 控 制 遙 控 器 的 API, 每 個 插 槽 能 控 制 一 個 或一 組 裝 置 (包 括 目 前 的 裝 置 和 未 來 可 能 的 裝 置 )。問 題 : 有 許 多 廠 商 類 , 每 個 類 有 各 自 的 操 作 。 遙 控 器 應(yīng) 該怎 樣 解 讀 按 鈕 被 按 下 的 動 作 ?解 決 方 法 : 采 用 “ 命 令 對 象 ” 封 裝 動 作 請 求 。 當(dāng) 按 鈕 按 下時 , 請 命 令 對 象 做 相 關(guān) 的 工 作 。 讓 “ 動 作 的 請 求 者 (遙 控 器 )”從 “ 動 作 的 執(zhí)
5、 行 者 (廠 商 類 之 一 的 實 例 )”對 象 中 解 耦 。 5 顧 客 把 訂 單交 給 女 招 待 。 訂 單芝 士 漢 堡麥 芽 飲 料 女 招 待 拿 了 訂 單 ,放 在 訂 單 柜 臺 , 然后 喊 一 聲 : “ 訂 單來 了 !” 快 餐 廚 師 根 據(jù)訂 單 準(zhǔn) 備 餐 點 。 餐 廳 訂 餐 6 從 這 里 開 始顧 客 創(chuàng) 建 一 張 訂 單 。 客 我 要 一 個 芝士 漢 堡 和 一 杯 麥 芽 飲 料 。 客訂 單 上 包 含 顧 客 訂購 的 餐 點 項 目 。 客 女 招 待 拿 走 了 訂 單 , 放在 訂 單 柜 臺 , 然 后 調(diào) 用orderU
6、p()方 法 ,通 知 廚 師開 始 準(zhǔn) 備 餐 點 。 客 快 餐 廚 師 根 據(jù)指 令 準(zhǔn) 備 餐 點 。 客訂 單 上 所 有 準(zhǔn) 備 餐 點 的 指 示 ,指 導(dǎo) 廚 師 用 類 似 makeBurger()這 樣 的 方 法 來 煮 調(diào) 。 客 訂 單 芝 士 漢 堡 麥 芽 飲 料 芝 士 漢 堡麥 芽 飲 料訂 單 更 詳 細(xì) 地研 究 剛 才的 交 互 過程 。 7 action1()action2().Receriverpublic void execute receiver.action1(); receiver.action2(); createCommandObject
7、() setCommand() action1()action2() . 動 作 和 接 收 者 在 命令 對 象 中 綁 在 一 起 。命 令 對 象 提 供 execute()方 法 , 它 封 裝 了 動 作 ,調(diào) 用 這 個 方 法 就 會 調(diào) 用接 受 者 的 這 些 動 作 。 客 戶 調(diào) 用 調(diào) 用 者 對 象 的setCommand()方 法 , 將 命令 對 象 儲 存 在 調(diào) 用 者 中 。 調(diào) 用 者 調(diào) 用 命 令 對 象的 execute()方 法 . .導(dǎo) 致 接 收 者的 動 作 被 調(diào) 用 。 客 戶 負(fù) 責(zé) 創(chuàng) 建 命 令 對象 。 命 令 對 象 包 含 了
8、接 收 者 上 的 一 組 動 作 。從 餐 廳 到 命 令 模 式 與 訂 餐 過 程 的略 微 不 同 之 處 :客 戶 一 般 不 會直 接 指 定 廚 師 。 8 實 現(xiàn) 命 令 接 口 所 有 的 命 令 對 象 實 現(xiàn) 相 同 的 包 含 一 個 方 法 的 接 口 。 在 餐 廳中 , 此 方 法 為 orderUp(), 命 令 對 象 中 慣 用 名 稱 execute()。public interface Command public void execute(); 只 有 這 一個 方 法 。 9 實 現(xiàn) 一 個 打 開 電 燈 的 命 令 根 據(jù) 廠 商 提 供 的 類
9、 ,light有 兩 個 方 法 : on()和 off()。 public class LightOnCommand implements Command Light light;public LightOnCommand(Light light) this.light = light;public void execute () light.on(); Light on() off() 10 使 用 命 令 對 象 假 定 遙 控 器 只 有 一 個 按 鈕 和 對 應(yīng) 的 插 槽 :public class SimpleRemoteControl () Command slot;publ
10、ic SimpleRemoteControl () public void setCommand(Command command) slot = command;public void buttonWasPressed () slot.execute(); 設(shè) 置 插 槽 控 制 的 命令 。 如 果 要 改 變 遙控 器 的 行 為 , 可 以重 復(fù) 調(diào) 用 這 個 方 法 。遙 控 器 的 角 色 是 “ 調(diào) 用 者 ” 。 11 遙 控 器 使 用 的 簡 單 測 試public class RemoteControlTest public class static void main(
11、String args) SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); LightOnCommand lightOn = new LightOnCommand(light); remote.setCommand(lightOn); remote.buttonWasPressed(); 客 戶 調(diào) 用 者創(chuàng) 建 一個 命 令對 象接 收者命 令 傳給 調(diào) 用者 調(diào) 用 者執(zhí) 行 命令 12 命 令 模 式 定 義命 令 模 式 將 “ 請 求 ” 封 裝 成 對 象 , 以 便
12、 使 用不 同 的 請 求 、 隊 列 或 者 日 志 來 參 數(shù) 化 其 它 對 象 。 命 令 模 式 也 支 持 可 撤 消 的 操 作 。 利 用 命 令 來 參 數(shù) 化 對 象 。 遙 控 器 對 象 并 不 關(guān) 心 是什 么 命 令 對 象 , 只 要 該 命 令 對 象 實 現(xiàn) 了 Command接 口即 可 。 命 令 模 式 也 可 以 實 現(xiàn) 隊 列 、 日 志 和 撤 消 操 作 。 13 Client Invoker Receiver ConcreteCommand execute() undo() public void execute() receiver.acti
13、on() setCommand() execute()undo Command .action() 客 戶 負(fù) 責(zé) 創(chuàng) 建ConcreteCommand,并 設(shè) 置 其 接 收 者 。 調(diào) 用 者 持 有 一 個 命令 對 象 , 在 某 個 時間 點 調(diào) 用 命 令 對 象的 exexute()方 法 。 Command為 所 有 命 令 聲 明 了 一 個 接口 , 調(diào) 用 命 令 對 象 的 execute()方 法 ,就 可 以 讓 接 收 者 進(jìn) 行 相 關(guān) 的 動 作 。這 個 接 口 也 有 一 個 undo()方 法 。 execute()方 法 調(diào)用 接 收 者 的 動 作
14、,以 滿 足 請 求 。 ConcreteCommand, 定 義 了 動 作和 接 收 者 之 間 的 綁 定 關(guān) 系 。 調(diào) 用者 只 要 調(diào) 用 execute()就 可 以 發(fā) 出請 求 , 然 后 由 ConcreteCommand調(diào) 用 接 收 者 的 一 個 或 多 個 動 作 。接 收 者 知 道 怎 樣 實現(xiàn) 請 求 。 任 何 類 都可 以 作 接 收 者 。命 令 模 式 類 圖 14 將 命 令 指 定 到 插 槽 將 遙 控 器 的 每 個 插 槽 , 對 應(yīng) 到 一 個 命 令 , 把 遙 控 器變 成 “ 調(diào) 用 者 ” 。 當(dāng) 按 下 按 鈕 , 相 應(yīng) 命 令
15、 對 象 的execute()方 法 就 會 被 調(diào) 用 , 使 得 接 收 者 的 動 作 被 調(diào) 用 。 15 起 居 室 燈廚 房 燈起 居 室吊 扇車 庫 門 音 響所 有 的 燈舞 會 模 式 每 個 插 槽 有 一 個 命 令 。 按 下 按 鈕 , 調(diào) 用 相 應(yīng)命 令 的 execute()方 法 。 調(diào) 用 者 execute() 在 execute()方 法 中 ,接 收者 的 動 作 會 被 調(diào) 用 。 execute()execute() execute() execute() execute() execute()execute() execute()execute(
16、) off() on() execute() UNDO ON OFF 16 實 現(xiàn) 遙 控 器public class RemoteControl Command onCommands; Command offCommands; public RemoteControl() onCommands = new Command7;offCommands = new Command7; Command noCommand = new NoCommand(); for (int i = 0; i 7; i+) onCommandsi = noCommand;offCommandsi = noComma
17、nd; public void setCommand(int slot, Command onCommand, Command offCommand) onCommandsslot = onCommand;offCommandsslot = offCommand; 17 實 現(xiàn) 遙 控 器 (續(xù) ) public void onButtonWasPushed(int slot) onCommandsslot.execute(); public void offButtonWasPushed(int slot) offCommandsslot.execute(); public String t
18、oString() / 覆 蓋 toString(), 打 印 出 每 個 插 槽 和 它 對 應(yīng) 的 命 令 。 StringBuffer stringBuff = new StringBuffer(); stringBuff.append(n- Remote Control -n); for (int i = 0; i onCommands.length; i+) stringBuff.append(slot + i + + onCommandsi.getClass().getName()+ + offCommandsi.getClass().getName() + n); return
19、stringBuff.toString(); 18 實 現(xiàn) 命 令 LightOnCommand與 前 面 的 一 樣 , LightOffCommand也 是 類 似 的 。public class LightOffCommand implements Command Light light;public LightOffCommand(Light light) this.light = light;public void execute () light.off(); 19 實 現(xiàn) 命 令 (續(xù) )StereoOffCommand很 簡 單 , 下 面 給 出 StereoOnWithCD
20、Command: public class StereoOnWithCDCommand implements Command Stereo stereo; public StereoOnWithCDCommand(Stereo stereo) this.stereo = stereo; public void execute() stereo.on();stereo.setCD();stereo.setVolume(11); 實 現(xiàn) 這 個 請 求 需 要 調(diào)用 音 響 的 三 個 方 法 :首 先 打 開 它 , 然 后 設(shè)置 成 播 放 CD, 最 后 把音 量 設(shè) 置 成 11。 20
21、測 試 遙 控 器public class RemoteLoader public static void main(String args) RemoteControl remoteControl = new RemoteControl(); Light livingRoomLight = new Light(Living Room); Light kitchenLight = new Light(Kitchen); CeilingFan ceilingFan= new CeilingFan(Living Room); GarageDoor garageDoor = new GarageDo
22、or(); Stereo stereo = new Stereo(Living Room); 所 有 裝 置 創(chuàng) 建 在合 適 的 位 置 ???戶 調(diào) 用 者 21 測 試 遙 控 器 (續(xù) )LightOnCommand livingRoomLightOn = new LightOnCommand(livingRoomLight);LightOffCommand livingRoomLightOff = new LightOffCommand(livingRoomLight);LightOnCommand kitchenLightOn = new LightOnCommand(kitche
23、nLight);LightOffCommand kitchenLightOff = new LightOffCommand(kitchenLight); 創(chuàng) 建 所 有 電 燈命 令 對 象 。 22 測 試 遙 控 器 (續(xù) )CeilingFanOnCommand ceilingFanOn = new CeilingFanOnCommand(ceilingFan);CeilingFanOffCommand ceilingFanOff = new CeilingFanOffCommand(ceilingFan); GarageDoorUpCommand garageDoorUp =new G
24、arageDoorUpCommand(garageDoor);GarageDoorDownCommand garageDoorDown =new GarageDoorDownCommand(garageDoor);創(chuàng) 建 掉 扇 開與 關(guān) 命 令 。 創(chuàng) 建 車 庫 門上 與 下 的 命令 。 23 測 試 遙 控 器 (續(xù) )StereoOnWithCDCommand stereoOnWithCD =new StereoOnWithCDCommand(stereo);StereoOffCommand stereoOff =new StereoOffCommand(stereo); remot
25、eControl.setCommand(0, livingRoomLightOn, livingRoomLightOff);remoteControl.setCommand(1, kitchenLightOn, kitchenLightOff);remoteControl.setCommand(2, ceilingFanOn, ceilingFanOff);remoteControl.setCommand(3, stereoOnWithCD, stereoOff);創(chuàng) 建 音 響 開與 關(guān) 命 令 。 所 有 命 令 加載 到 遙 控 器插 槽 中 。 24 測 試 遙 控 器 (續(xù) ) Sy
26、stem.out.println(remoteControl); remoteControl.onButtonWasPushed(0); remoteControl.offButtonWasPushed(0); remoteControl.onButtonWasPushed(1); remoteControl.offButtonWasPushed(1); remoteControl.onButtonWasPushed(2); remoteControl.offButtonWasPushed(2); remoteControl.onButtonWasPushed(3); remoteContro
27、l.offButtonWasPushed(3); 用 toString()方法 打 印 遙 控 器每 個 插 槽 指 定的 命 令 。按 下 每 個 插 槽開 與 關(guān) 命 令 。 25 測 試 結(jié) 果 開 啟插 槽 關(guān) 閉插 槽 命 令 執(zhí)行 結(jié) 果 26 NoCommand對 象 NoCommand對 象 是 一 個 空 對 象 (null object)。 在 遙 控 器 中 , 我 們 不 想 每 次 都 檢 查 某 個 插 槽 是 否 加 載 了 命令 。 我 們 將 每 個 插 糟 都 預(yù) 先 指 定 NoCommand對 象 , 以 便 確 定 每個 插 槽 永 遠(yuǎn) 都 有 命 令
28、 對 象 。 否 則 , 需 要 類 似 下 面 的 代 碼 :public void onButtonWasPushed(int slot) if (onCommandsslot != null) onCommandsslot.execute(); 27 遙 控 器API 廠 商 類 被 用 來 控 制 特 定 的 家 電 自 動 化 裝 置 (以 Light類 作 為 例 子 )。 利 用 Command接 口 , 每 個 動 作 都 被 實 現(xiàn) 成 一 個 簡 單 的 命 令 對 象 。 命 令 對 象 持 有 一 個 廠 商 類 的 實 例 的 引 用 , 并 實 現(xiàn) 一 個 exec
29、ute()方 法 。 這 個 方 法 調(diào) 用 廠 商 類 的 一 個 或 多 個 方 法 , 完 成 特 定 的 行 為 。 這 個 例 子 中 , 有 兩 個 類 , 分 別 是 打 開 電 燈 與 關(guān) 閉 電 燈 。 RemoteLoader創(chuàng) 建 許 多 命 令 對 象 , 然 后 將 其 加 載 到 遙 控 器 的 插 槽 中 。 每 個 命 令 對 象 都 封 裝 了 某 個 家 電 自 動 化 裝 置 的 一 項 請 求 。 RemoteControl管 理 一 組 命 令 對 象 , 每 個 按 鈕 都 有 一 個 命 令 對 象 。 每 當(dāng) 按 鈕 按 下 , 就 調(diào) 用 相
30、應(yīng) 的 xxButtonWasPushed()方 法 , 間 接 造 成 該 命 令 的 execute()方 法 被 調(diào) 用 。 所 有 遙 控 器 命 令 都 實 現(xiàn) 這 個 Command接 口 , 此 接 口 中 包 含 了 一 個 方 法 , 也 就 是 execute(), 命 令 封 裝 了 某 個 特 定 廠 商 類 的 一 組 動 作 , 遙 控 器 可 以 通 過 調(diào) 用 execute()方 法 , 執(zhí) 行 這 些 動 作 。 RemoteLoader RemoteControl LightOnCommandLightonCommandsoffCommandssetCom
31、mand()onButtonWasPushed()offButtonWasPushed()on()off() execute() Command execute()execute()LightOffCommandpublic void execute() light.off()public void execute() light.on() 28 支 持 undo功 能 (以 電 燈 為 例 ) 在 Command接 口 中 加 入 undo()方 法 。public interface Command public void execute();public void undo(); 從 L
32、ightOnCommand開 始 下 手 。public class LightOnCommand implements CommandLight light;public LightOnCommand(Light light)this light = light;public void execute() Light.on(); public void undo() light.off(); execute()打 開 電燈 , undo()就 是關(guān) 閉 電 燈 。 29 支 持 undo功 能 (以 電 燈 為 例 )(續(xù) )public class LightOffCommand impl
33、ements CommandLight light;public LightOffCommand(Light light)this light = light;public void execute() Light.off();public void undo() light.on(); undo()把電 燈 打 開 。 30 支 持 undo功 能 (續(xù) ) 修 改 遙 控 器 類 。 加 入 一 個 新 的 實 例 變 量 , 追 蹤 最 后 被 調(diào) 用 的 命 令 。public class RemoteControlWithUndo Command onCommands;Command
34、 offCommands;Command undoCommand; public RemoteControlWithUndo() onCommands = new Command7;offCommands = new Command7; Command noCommand = new NoCommand();for(int i=0; i7; i+) onCommandsi = noCommand;offCommandsi = noCommand; undoCommand = noCommand; 31 public void setCommand(int slot, Command onCom
35、mand, Command offCommand) onCommandsslot = onCommand;offCommandsslot = offCommand; public void onButtonWasPushed(int slot) onCommandsslot.execute();undoCommand = onCommandsslot; public void offButtonWasPushed(int slot) offCommandsslot.execute();undoCommand = offCommandsslot; public void undoButtonWa
36、sPushed() undoCommand.undo(); public String toString() / toString代 碼 undoCommand變 量 記 錄 按 鈕命 令 。 調(diào) 用undoCommand實例 變 量 的 undo()方法 。 32 測 試 undo按 鈕public class RemoteLoader public static void main(String args) RemoteControlWithUndo remoteControl = new RemoteControlWithUndo(); Light livingRoomLight = n
37、ew Light(Living Room); LightOnCommand livingRoomLightOn = new LightOnCommand(livingRoomLight); LightOffCommand livingRoomLightOff = new lightOffCommand(livingRoomLight); remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); remoteControl.onButtonWasPushed(0); remoteControl.offButtonWas
38、Pushed(0); System.out.println(remoteControl); remoteControl.undoButtonWasPushed(); remoteControl.offButtonWasPushed(0); remoteControl.onButtonWasPushed(0); System.out.println(remoteControl); remoteControl.undoButtonWasPushed(); 打 開 、 關(guān) 閉 電燈 ,然 后 撤 消 。關(guān) 閉 、 打 開 電燈 ,然 后 撤 消 。 33 測 試 結(jié) 果 打 開 電 燈 ,關(guān) 閉 電
39、 燈 。 電 燈 命 令 。按 下 撤 消 按 鈕 。 undo記錄 的 命令 。 34 使 用 狀 態(tài) 實 現(xiàn) undo要 實 現(xiàn) 撤 消 的 功 能 , 通 常 需 要 記 錄 一 些 狀 態(tài) 。 下 面 以 天 花 板 上 的掉 扇 為 例 說 明 。 public class CeilingFan public static final int HIGH = 3;public static final int MEDIUM = 2;public static final int LOW = 1;public static final int OFF = 0;String locatio
40、n; / 例 如 客 廳int speed; public CeilingFan(String location) this.location = location;speed = OFF; public void high() / 設(shè) 置 高 轉(zhuǎn) 速 public void medium() / 設(shè) 置 中 轉(zhuǎn) 速 public void low() / 設(shè) 置 中 轉(zhuǎn) 速 public void off() / 關(guān) 閉 掉 扇 public int getSpeed() return speed; 35 加 入 undo到 掉 扇 命 令 類 public class CeilingFan
41、HighCommand implements Command CeilingFan ceilingFan;int prevSpeed; public CeilingFanHighCommand(CeilingFan ceilingFan) this.ceilingFan = ceilingFan; public void execute() prevSpeed = ceilingFan.getSpeed(); ceilingFan.high(); public void undo() if (prevSpeed = CeilingFan.HIGH) ceilingFan.high(); els
42、e if (prevSpeed = CeilingFan.MEDIUM) ceilingFan.medium(); else if (prevSpeed = CeilingFan.LOW) ceilingFan.low(); else if (prevSpeed = CeilingFan.OFF) ceilingFan.off(); 記 錄 掉 扇 之 前的 速 度 變 量 。 記 錄 掉 扇 之前 的 速 度 。掉 扇 速 度 設(shè) 置 回之 前 的 值 。 36 測 試 天 花 板 掉 扇public class RemoteLoader public static void main(St
43、ring args) RemoteControlWithUndo remoteControl = new RemoteControlWithUndo(); CeilingFan ceilingFan = new CeilingFan(Living Room); CeilingFanMediumCommand ceilingFanMedium = new CeilingFanMediumCommand(ceilingFan); CeilingFanHighCommand ceilingFanHigh = new CeilingFanHighCommand(ceilingFan); Ceiling
44、FanOffCommand ceilingFanOff = new CeilingFanOffCommand(ceilingFan); remoteControl.setCommand(0, ceilingFanMedium, ceilingFanOff); remoteControl.setCommand(1, ceilingFanHigh, ceilingFanOff); remoteControl.onButtonWasPushed(0); remoteControl.offButtonWasPushed(0); System.out.println(remoteControl); re
45、moteControl.undoButtonWasPushed(); remoteControl.onButtonWasPushed(1); System.out.println(remoteControl); remoteControl.undoButtonWasPushed(); 實 例 化 高 速 、中 速 和 關(guān) 閉 三個 命 令 。中 速 設(shè) 置 到 0號 插槽 , 高 速 設(shè) 置 到 1號 插 槽 并 加 載 兩個 插 槽 的 關(guān) 閉 命令 。中速高速 37 測 試 結(jié) 果 中 速 打 開 天 花 板掉 扇 , 然 后 關(guān) 閉 。 遙 控器 命令 。撤 消 最 后 一 個 命 令
46、, 回 到 中 速 。打 開 高 速 。 再 一 次 撤 消 ,回 到 中 速 。 38 使 用 宏 命 令 首 先 創(chuàng) 建 宏 命 令 集 合 。 Light light = new Light(Living Room); TV tv = new TV(Living Room); Stereo stereo = new Stereo(Living Room); Hottub hottub = new Hottub(); LightOnCommand lightOn = new LightOnCommand(light); StereoOnCommand stereoOn = new Ster
47、eoOnCommand(stereo); TVOnCommand tvOn = new TVOnCommand(tv); HottubOnCommand hottubOn = new ottubOnCommand(hottub);創(chuàng) 建 所 有 的 裝置 : 電 燈 、 電視 、 音 響 和 熱水 器 。 39 使 用 宏 命 令 (續(xù) ) 創(chuàng) 建 兩 個 數(shù) 組 , 記 錄 打 開 和 關(guān) 閉 命 令 。 Command partyOn = lightOn, stereoOn, tvOn, hottubOn; Command partyOff = lightOff, stereoOff, t
48、vOff, hottubOff; MacroCommand partyOnMacro = new MacroCommand(partyOn); MacroCommand partyOffMacro = new MacroCommand(partyOff); public class MacroCommand implements Command Command commands; public MacroCommand(Command commands) mands = commands; public void execute() for (int i = 0; i commands.len
49、gth; i+) commandsi.execute(); 數(shù) 組 存 儲一 堆 命 令 。一 次 性 執(zhí) 行 數(shù) 組里 的 每 一 個 命 令 。 40 使 用 宏 命 令 (續(xù) ) 宏 命 令 指 定 到 一 個 按 鈕 。 remoteControl.setCommand(0, partyOnMacro, partyOffMacro); 測 試 是 否 正 常 工 作 。 System.out.println(remoteControl); System.out.println(- Pushing Macro On-); remoteControl.onButtonWasPushed(0
50、); System.out.println(- Pushing Macro Off-); remoteControl.offButtonWasPushed(0); 41 測 試 結(jié) 果 開 啟 宏 。關(guān) 閉 宏 。 42 實 現(xiàn) 命 令 接口 的 對 象 放進(jìn) 隊 列 。 線 程 從 隊 列 中 一 個 個 地 刪除 命 令 對 象 , 然 后 調(diào) 用 命令 對 象 的 execute()方 法 。一 旦 完 成 了 , 就 會 去 處 理下 一 個 命 令 對 象 。 命 令 線 程 的 計算 工 作 工 作 隊 列這 樣 能 有 效 地把 運 算 限 制 在固 定 數(shù) 目 的 線程 中 運
51、 行 。 命 令 模 式 更 多 用 途 : 隊 列 請 求工 作 隊 列 類 和 進(jìn) 行 計 算 的對 象 之 間 是 完 全 解 耦 的 。工 作 隊 列 不 在 乎 命 令 做 什么 , 只 知 道 取 出 命 令 對 象 ,調(diào) 用 其 execute()方 法 。 多 線 程處 理 。 43 命 令 模 式 更 多 用 途 : 日 志 請 求某 些 應(yīng) 用 需 要 將 所 有 動 作 記 錄 在 日 志 中 , 并 能 在 系 統(tǒng) 死 機(jī)后 重 新 調(diào) 用 這 些 動 作 恢 復(fù) 到 之 前 的 狀 態(tài) 。 死 機(jī) 恢 復(fù)當(dāng) 每 個 命 令 被 執(zhí) 行 時 ,會 被 儲 存 在 磁 盤 上 。 系 統(tǒng) 死 機(jī) 后 , 這 些對 象 會 被 加 載 , 并以 正 確 的 次 序 執(zhí) 行 。Store LoadLoadLoad 1. execute()2. execute()3. execute() 1. execute()3. execute() Store 2. execute() Store命 令 接 口 中 新增 store()和load()兩 個 方 法 。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導(dǎo)班子2024年度民主生活會對照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學(xué)習(xí)材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國特色金融發(fā)展之路加快建設(shè)金融強(qiáng)國(范文)
- 鍋爐基礎(chǔ)知識:啟爐注意事項技術(shù)問答題
- 領(lǐng)導(dǎo)班子2024年度民主生活會“四個帶頭”對照檢查材料范文(三篇)
- 正常運行時影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復(fù)習(xí)題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復(fù)習(xí)題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運行監(jiān)視和調(diào)整