日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

HeadFirst设计模式笔记——命令模式

發布時間:2023/12/9 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HeadFirst设计模式笔记——命令模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命令模式是將具體的一個或一組操作封裝成一個獨立命令的設計方法。
所有命令都實現同一個Command接口和其中的execute方法,調用者找到需要處理的命令并調用execute方法執行。

《HeadFirst設計模式》中提到的例子

智能家居電器廠商提供控制多種電器API,如電燈開關,風扇調速和開關,音響播放等,遙控器面板上有固定的按鈕數,且每一排的可編程插槽上需要安裝不同的裝置來控制這些電器,應該如何設計遙控器的API?

解決方法

考慮到電器的api是可變的,但遙控器樣式相對固定,如果將每個按鍵的處理直接綁定api,耦合太高后續更新成本會變大。使用命令模式解決問題,遙控器的每一個按鍵功能在程序運行時才做綁定,保證擴展性。

1.定義一個Command接口,包含一個execute方法

public interface Command {public void execute(); }

2.因為每種電器需要開和關2種操作,因此需要為每種電器定義2個實現了Command接口的類,分別對接開和關的操作。
如:

//開燈 public class LightOnCommand implements Command {private Light mLight;public LightOnCommand(Light l) {mLight = l;}@Overridepublic void execute() {// TODO Auto-generated method stubmLight.on();}}//打開音響并自動播放 class StereoOnAndPlayCommand implements Command {private Stereo mStereo;public StereoOnAndPlayCommand(Stereo s) {mStereo = s;}@Overridepublic void execute() {mStereo.on();mStereo.loadCD();mStereo.play();}}

3.需要一個類作為中間者來管理命令,并提供按鍵的處理:

public class RemoteControl {private static final int SLOT_NUM = 7;Command[] mOnCommand;//保存各類電器的“打開”命令Command[] mOffCommand;//“關閉”命令public RemoteControl() {mOnCommand = new Command[SLOT_NUM];mOffCommand = new Command[SLOT_NUM];}//綁定每行on/off按鍵的Commandpublic void setCommand(int slot, Command commandOn, Command commandOff){if(slot >= 0 && slot < SLOT_NUM){mOnCommand[slot] = commandOn;mOffCommand[slot] = commandOff;}}//提供按鍵處理public void buttonOnPressed(int slot){if(slot >= 0 && slot < SLOT_NUM)mOnCommand[slot].execute();}public void buttonOffPressed(int slot){if(slot >= 0 && slot < SLOT_NUM)mOffCommand[slot].execute();}}

4.調用

public static void main(String[] args) {RemoteControl mRemote = new RemoteControl();//開燈{Light l = new Light();//綁定開和關的commandmRemote.setCommand(0, new LightOnCommand(l), new LightOffCommand(l));mRemote.buttonOnPressed(0);//}//{打開音響Stereo s = new Stereo();mRemote.setCommand(1, new StereoOnAndPlayCommand(s), new StereoOffCommand(l));mRemote.buttonOnPressed(1);//}}

命令模式的優點:

將發出請求的對象和命令執行的對象解耦。

命令模式的其他應用:

  • 隊列請求
    將具體操作打包成一個命令,使用隊列存儲并批量處理這些命令。(可以應用線程池,Task等)
    處理方法從隊列中讀取一個請求,從隊列中把它刪除,然后執行請求的execute()。

  • 日志請求
    為應對系統突發情況,應用可以將執行過的Command記錄下來,一旦系統崩潰或重啟可以有辦法恢復到之前的狀態。
    在Command接口中加入寫日志和恢復的方法(store() & load()),在執行命令時會使用store方法將Command持久化寫入log文件保存。load()方法即可以從log文件中恢復并執行Command,還原狀態。

  • 總結

    以上是生活随笔為你收集整理的HeadFirst设计模式笔记——命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。