秋霞电影网午夜鲁丝片无码,真人h视频免费观看视频,囯产av无码片毛片一级,免费夜色私人影院在线观看,亚洲美女综合香蕉片,亚洲aⅴ天堂av在线电影猫咪,日韩三级片网址入口

《命令模式》PPT課件

上傳人:san****019 文檔編號(hào):21469406 上傳時(shí)間:2021-05-01 格式:PPT 頁(yè)數(shù):43 大小:1.56MB
收藏 版權(quán)申訴 舉報(bào) 下載
《命令模式》PPT課件_第1頁(yè)
第1頁(yè) / 共43頁(yè)
《命令模式》PPT課件_第2頁(yè)
第2頁(yè) / 共43頁(yè)
《命令模式》PPT課件_第3頁(yè)
第3頁(yè) / 共43頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《命令模式》PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《《命令模式》PPT課件(43頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、1 第 十 一 章 命 令 模 式家 電 自 動(dòng) 化 遙 控 器 的 API遙 控 器 有 七 個(gè) 可 編 程 的 插 槽 (每 個(gè) 控 制 一 個(gè) 不 同 的 家 電自 動(dòng) 化 裝 置 ), 每 個(gè) 插 槽 有 對(duì) 應(yīng) 的 開 (on)/關(guān) (off)按 鈕 ; 有 一個(gè) 撤 消 (undo)按 鈕 。有 一 組 Java類 , 這 些 類 是 由 多 家 廠 商 開 發(fā) 出 來(lái) 的 , 用來(lái) 控 制 家 電 裝 置 , 例 如 電 燈 、 風(fēng) 扇 、 熱 水 器 、 音 響 設(shè) 備 等 。 2 七 個(gè) 插 槽 具 備 各 自 的“ 開 ” 和 “ 關(guān) ” 按 鈕 。有 七 個(gè) 插 槽 需

2、要編 程 。 每 個(gè) 插 槽 控 制 不 同 的 裝 置 。 寫 上 要 控 制的 裝 置 名 稱 。 共 用 的 撤 消 按 鈕 。 控 制 一 號(hào)插 槽 ???制 二 號(hào)插 槽 。 .依 次 類 推 。遙 控器 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、 自 動(dòng) 化 遙 控 器 的 API(續(xù) )目 標(biāo) : 創(chuàng) 建 一 組 控 制 遙 控 器 的 API, 每 個(gè) 插 槽 能 控 制 一 個(gè) 或一 組 裝 置 (包 括 目 前 的 裝 置 和 未 來(lái) 可 能 的 裝 置 )。問(wèn) 題 : 有 許 多 廠 商 類 , 每 個(gè) 類 有 各 自 的 操 作 。 遙 控 器 應(yīng) 該怎 樣 解 讀 按 鈕 被 按 下 的 動(dòng) 作 ?解 決 方 法 : 采 用 “ 命 令 對(duì) 象 ” 封 裝 動(dòng) 作 請(qǐng) 求 。 當(dāng) 按 鈕 按 下時(shí) , 請(qǐng) 命 令 對(duì) 象 做 相 關(guān) 的 工 作 。 讓 “ 動(dòng) 作 的 請(qǐng) 求 者 (遙 控 器 )”從 “ 動(dòng) 作 的 執(zhí)

5、 行 者 (廠 商 類 之 一 的 實(shí) 例 )”對(duì) 象 中 解 耦 。 5 顧 客 把 訂 單交 給 女 招 待 。 訂 單芝 士 漢 堡麥 芽 飲 料 女 招 待 拿 了 訂 單 ,放 在 訂 單 柜 臺(tái) , 然后 喊 一 聲 : “ 訂 單來(lái) 了 !” 快 餐 廚 師 根 據(jù)訂 單 準(zhǔn) 備 餐 點(diǎn) 。 餐 廳 訂 餐 6 從 這 里 開 始顧 客 創(chuàng) 建 一 張 訂 單 。 客 我 要 一 個(gè) 芝士 漢 堡 和 一 杯 麥 芽 飲 料 。 客訂 單 上 包 含 顧 客 訂購(gòu) 的 餐 點(diǎn) 項(xiàng) 目 。 客 女 招 待 拿 走 了 訂 單 , 放在 訂 單 柜 臺(tái) , 然 后 調(diào) 用orderU

6、p()方 法 ,通 知 廚 師開 始 準(zhǔn) 備 餐 點(diǎn) 。 客 快 餐 廚 師 根 據(jù)指 令 準(zhǔn) 備 餐 點(diǎn) 。 客訂 單 上 所 有 準(zhǔn) 備 餐 點(diǎn) 的 指 示 ,指 導(dǎo) 廚 師 用 類 似 makeBurger()這 樣 的 方 法 來(lái) 煮 調(diào) 。 客 訂 單 芝 士 漢 堡 麥 芽 飲 料 芝 士 漢 堡麥 芽 飲 料訂 單 更 詳 細(xì) 地研 究 剛 才的 交 互 過(guò)程 。 7 action1()action2().Receriverpublic void execute receiver.action1(); receiver.action2(); createCommandObject

7、() setCommand() action1()action2() . 動(dòng) 作 和 接 收 者 在 命令 對(duì) 象 中 綁 在 一 起 。命 令 對(duì) 象 提 供 execute()方 法 , 它 封 裝 了 動(dòng) 作 ,調(diào) 用 這 個(gè) 方 法 就 會(huì) 調(diào) 用接 受 者 的 這 些 動(dòng) 作 。 客 戶 調(diào) 用 調(diào) 用 者 對(duì) 象 的setCommand()方 法 , 將 命令 對(duì) 象 儲(chǔ) 存 在 調(diào) 用 者 中 。 調(diào) 用 者 調(diào) 用 命 令 對(duì) 象的 execute()方 法 . .導(dǎo) 致 接 收 者的 動(dòng) 作 被 調(diào) 用 。 客 戶 負(fù) 責(zé) 創(chuàng) 建 命 令 對(duì)象 。 命 令 對(duì) 象 包 含 了

8、接 收 者 上 的 一 組 動(dòng) 作 。從 餐 廳 到 命 令 模 式 與 訂 餐 過(guò) 程 的略 微 不 同 之 處 :客 戶 一 般 不 會(huì)直 接 指 定 廚 師 。 8 實(shí) 現(xiàn) 命 令 接 口 所 有 的 命 令 對(duì) 象 實(shí) 現(xiàn) 相 同 的 包 含 一 個(gè) 方 法 的 接 口 。 在 餐 廳中 , 此 方 法 為 orderUp(), 命 令 對(duì) 象 中 慣 用 名 稱 execute()。public interface Command public void execute(); 只 有 這 一個(gè) 方 法 。 9 實(shí) 現(xiàn) 一 個(gè) 打 開 電 燈 的 命 令 根 據(jù) 廠 商 提 供 的 類

9、 ,light有 兩 個(gè) 方 法 : 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 使 用 命 令 對(duì) 象 假 定 遙 控 器 只 有 一 個(gè) 按 鈕 和 對(duì) 應(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) 用 這 個(gè) 方 法 。遙 控 器 的 角 色 是 “ 調(diào) 用 者 ” 。 11 遙 控 器 使 用 的 簡(jiǎn) 單 測(cè) 試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) 建 一個(gè) 命 令對(duì) 象接 收者命 令 傳給 調(diào) 用者 調(diào) 用 者執(zhí) 行 命令 12 命 令 模 式 定 義命 令 模 式 將 “ 請(qǐng) 求 ” 封 裝 成 對(duì) 象 , 以 便

12、 使 用不 同 的 請(qǐng) 求 、 隊(duì) 列 或 者 日 志 來(lái) 參 數(shù) 化 其 它 對(duì) 象 。 命 令 模 式 也 支 持 可 撤 消 的 操 作 。 利 用 命 令 來(lái) 參 數(shù) 化 對(duì) 象 。 遙 控 器 對(duì) 象 并 不 關(guān) 心 是什 么 命 令 對(duì) 象 , 只 要 該 命 令 對(duì) 象 實(shí) 現(xiàn) 了 Command接 口即 可 。 命 令 模 式 也 可 以 實(shí) 現(xiàn) 隊(duì) 列 、 日 志 和 撤 消 操 作 。 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) 用 者 持 有 一 個(gè) 命令 對(duì) 象 , 在 某 個(gè) 時(shí)間 點(diǎn) 調(diào) 用 命 令 對(duì) 象的 exexute()方 法 。 Command為 所 有 命 令 聲 明 了 一 個(gè) 接口 , 調(diào) 用 命 令 對(duì) 象 的 execute()方 法 ,就 可 以 讓 接 收 者 進(jìn) 行 相 關(guān) 的 動(dòng) 作 。這 個(gè) 接 口 也 有 一 個(gè) undo()方 法 。 execute()方 法 調(diào)用 接 收 者 的 動(dòng) 作

14、,以 滿 足 請(qǐng) 求 。 ConcreteCommand, 定 義 了 動(dòng) 作和 接 收 者 之 間 的 綁 定 關(guān) 系 。 調(diào) 用者 只 要 調(diào) 用 execute()就 可 以 發(fā) 出請(qǐng) 求 , 然 后 由 ConcreteCommand調(diào) 用 接 收 者 的 一 個(gè) 或 多 個(gè) 動(dòng) 作 。接 收 者 知 道 怎 樣 實(shí)現(xiàn) 請(qǐng) 求 。 任 何 類 都可 以 作 接 收 者 。命 令 模 式 類 圖 14 將 命 令 指 定 到 插 槽 將 遙 控 器 的 每 個(gè) 插 槽 , 對(duì) 應(yīng) 到 一 個(gè) 命 令 , 把 遙 控 器變 成 “ 調(diào) 用 者 ” 。 當(dāng) 按 下 按 鈕 , 相 應(yīng) 命 令

15、 對(duì) 象 的execute()方 法 就 會(huì) 被 調(diào) 用 , 使 得 接 收 者 的 動(dòng) 作 被 調(diào) 用 。 15 起 居 室 燈廚 房 燈起 居 室吊 扇車 庫(kù) 門 音 響所 有 的 燈舞 會(huì) 模 式 每 個(gè) 插 槽 有 一 個(gè) 命 令 。 按 下 按 鈕 , 調(diào) 用 相 應(yīng)命 令 的 execute()方 法 。 調(diào) 用 者 execute() 在 execute()方 法 中 ,接 收者 的 動(dòng) 作 會(huì) 被 調(diào) 用 。 execute()execute() execute() execute() execute() execute()execute() execute()execute(

16、) off() on() execute() UNDO ON OFF 16 實(shí) 現(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 實(shí) 現(xiàn) 遙 控 器 (續(xù) ) public void onButtonWasPushed(int slot) onCommandsslot.execute(); public void offButtonWasPushed(int slot) offCommandsslot.execute(); public String t

18、oString() / 覆 蓋 toString(), 打 印 出 每 個(gè) 插 槽 和 它 對(duì) 應(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 實(shí) 現(xiàn) 命 令 LightOnCommand與 前 面 的 一 樣 , LightOffCommand也 是 類 似 的 。public class LightOffCommand implements Command Light light;public LightOffCommand(Light light) this.light = light;public void execute () light.off(); 19 實(shí) 現(xiàn) 命 令 (續(xù) )StereoOffCommand很 簡(jiǎn) 單 , 下 面 給 出 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); 實(shí) 現(xiàn) 這 個(gè) 請(qǐng) 求 需 要 調(diào)用 音 響 的 三 個(gè) 方 法 :首 先 打 開 它 , 然 后 設(shè)置 成 播 放 CD, 最 后 把音 量 設(shè) 置 成 11。 20

21、測(cè) 試 遙 控 器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 測(cè) 試 遙 控 器 (續(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) 建 所 有 電 燈命 令 對(duì) 象 。 22 測(cè) 試 遙 控 器 (續(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) 建 車 庫(kù) 門上 與 下 的 命令 。 23 測(cè) 試 遙 控 器 (續(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 測(cè) 試 遙 控 器 (續(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()方法 打 印 遙 控 器每 個(gè) 插 槽 指 定的 命 令 。按 下 每 個(gè) 插 槽開 與 關(guān) 命 令 。 25 測(cè) 試 結(jié) 果 開 啟插 槽 關(guān) 閉插 槽 命 令 執(zhí)行 結(jié) 果 26 NoCommand對(duì) 象 NoCommand對(duì) 象 是 一 個(gè) 空 對(duì) 象 (null object)。 在 遙 控 器 中 , 我 們 不 想 每 次 都 檢 查 某 個(gè) 插 槽 是 否 加 載 了 命令 。 我 們 將 每 個(gè) 插 糟 都 預(yù) 先 指 定 NoCommand對(duì) 象 , 以 便 確 定 每個(gè) 插 槽 永 遠(yuǎn) 都 有 命 令

28、 對(duì) 象 。 否 則 , 需 要 類 似 下 面 的 代 碼 :public void onButtonWasPushed(int slot) if (onCommandsslot != null) onCommandsslot.execute(); 27 遙 控 器API 廠 商 類 被 用 來(lái) 控 制 特 定 的 家 電 自 動(dòng) 化 裝 置 (以 Light類 作 為 例 子 )。 利 用 Command接 口 , 每 個(gè) 動(dòng) 作 都 被 實(shí) 現(xiàn) 成 一 個(gè) 簡(jiǎn) 單 的 命 令 對(duì) 象 。 命 令 對(duì) 象 持 有 一 個(gè) 廠 商 類 的 實(shí) 例 的 引 用 , 并 實(shí) 現(xiàn) 一 個(gè) exec

29、ute()方 法 。 這 個(gè) 方 法 調(diào) 用 廠 商 類 的 一 個(gè) 或 多 個(gè) 方 法 , 完 成 特 定 的 行 為 。 這 個(gè) 例 子 中 , 有 兩 個(gè) 類 , 分 別 是 打 開 電 燈 與 關(guān) 閉 電 燈 。 RemoteLoader創(chuàng) 建 許 多 命 令 對(duì) 象 , 然 后 將 其 加 載 到 遙 控 器 的 插 槽 中 。 每 個(gè) 命 令 對(duì) 象 都 封 裝 了 某 個(gè) 家 電 自 動(dòng) 化 裝 置 的 一 項(xiàng) 請(qǐng) 求 。 RemoteControl管 理 一 組 命 令 對(duì) 象 , 每 個(gè) 按 鈕 都 有 一 個(gè) 命 令 對(duì) 象 。 每 當(dāng) 按 鈕 按 下 , 就 調(diào) 用 相

30、應(yīng) 的 xxButtonWasPushed()方 法 , 間 接 造 成 該 命 令 的 execute()方 法 被 調(diào) 用 。 所 有 遙 控 器 命 令 都 實(shí) 現(xiàn) 這 個(gè) Command接 口 , 此 接 口 中 包 含 了 一 個(gè) 方 法 , 也 就 是 execute(), 命 令 封 裝 了 某 個(gè) 特 定 廠 商 類 的 一 組 動(dòng) 作 , 遙 控 器 可 以 通 過(guò) 調(diào) 用 execute()方 法 , 執(zhí) 行 這 些 動(dòng) 作 。 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ù) ) 修 改 遙 控 器 類 。 加 入 一 個(gè) 新 的 實(shí) 例 變 量 , 追 蹤 最 后 被 調(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實(shí)例 變 量 的 undo()方法 。 32 測(cè) 試 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 測(cè) 試 結(jié) 果 打 開 電 燈 ,關(guān) 閉 電

39、 燈 。 電 燈 命 令 。按 下 撤 消 按 鈕 。 undo記錄 的 命令 。 34 使 用 狀 態(tài) 實(shí) 現(xiàn) undo要 實(shí) 現(xiàn) 撤 消 的 功 能 , 通 常 需 要 記 錄 一 些 狀 態(tài) 。 下 面 以 天 花 板 上 的掉 扇 為 例 說(shuō) 明 。 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 測(cè) 試 天 花 板 掉 扇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(); 實(shí) 例 化 高 速 、中 速 和 關(guān) 閉 三個(gè) 命 令 。中 速 設(shè) 置 到 0號(hào) 插槽 , 高 速 設(shè) 置 到 1號(hào) 插 槽 并 加 載 兩個(gè) 插 槽 的 關(guān) 閉 命令 。中速高速 37 測(cè) 試 結(jié) 果 中 速 打 開 天 花 板掉 扇 , 然 后 關(guān) 閉 。 遙 控器 命令 。撤 消 最 后 一 個(gè) 命 令

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) 建 兩 個(gè) 數(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ù) 組 存 儲(chǔ)一 堆 命 令 。一 次 性 執(zhí) 行 數(shù) 組里 的 每 一 個(gè) 命 令 。 40 使 用 宏 命 令 (續(xù) ) 宏 命 令 指 定 到 一 個(gè) 按 鈕 。 remoteControl.setCommand(0, partyOnMacro, partyOffMacro); 測(cè) 試 是 否 正 常 工 作 。 System.out.println(remoteControl); System.out.println(- Pushing Macro On-); remoteControl.onButtonWasPushed(0

50、); System.out.println(- Pushing Macro Off-); remoteControl.offButtonWasPushed(0); 41 測(cè) 試 結(jié) 果 開 啟 宏 。關(guān) 閉 宏 。 42 實(shí) 現(xiàn) 命 令 接口 的 對(duì) 象 放進(jìn) 隊(duì) 列 。 線 程 從 隊(duì) 列 中 一 個(gè) 個(gè) 地 刪除 命 令 對(duì) 象 , 然 后 調(diào) 用 命令 對(duì) 象 的 execute()方 法 。一 旦 完 成 了 , 就 會(huì) 去 處 理下 一 個(gè) 命 令 對(duì) 象 。 命 令 線 程 的 計(jì)算 工 作 工 作 隊(duì) 列這 樣 能 有 效 地把 運(yùn) 算 限 制 在固 定 數(shù) 目 的 線程 中 運(yùn)

51、 行 。 命 令 模 式 更 多 用 途 : 隊(duì) 列 請(qǐng) 求工 作 隊(duì) 列 類 和 進(jìn) 行 計(jì) 算 的對(duì) 象 之 間 是 完 全 解 耦 的 。工 作 隊(duì) 列 不 在 乎 命 令 做 什么 , 只 知 道 取 出 命 令 對(duì) 象 ,調(diào) 用 其 execute()方 法 。 多 線 程處 理 。 43 命 令 模 式 更 多 用 途 : 日 志 請(qǐng) 求某 些 應(yīng) 用 需 要 將 所 有 動(dòng) 作 記 錄 在 日 志 中 , 并 能 在 系 統(tǒng) 死 機(jī)后 重 新 調(diào) 用 這 些 動(dòng) 作 恢 復(fù) 到 之 前 的 狀 態(tài) 。 死 機(jī) 恢 復(fù)當(dāng) 每 個(gè) 命 令 被 執(zhí) 行 時(shí) ,會(huì) 被 儲(chǔ) 存 在 磁 盤 上 。 系 統(tǒng) 死 機(jī) 后 , 這 些對(duì) 象 會(huì) 被 加 載 , 并以 正 確 的 次 序 執(zhí) 行 。Store LoadLoadLoad 1. execute()2. execute()3. execute() 1. execute()3. execute() Store 2. execute() Store命 令 接 口 中 新增 store()和load()兩 個(gè) 方 法 。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!