命令模式定義:是乙個高內聚的模式,將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復操作工作。
優點:1、類間解耦。
呼叫者角色與接受者角色(light)之間沒有依賴,呼叫者只需要呼叫command的exec方法,不需要知道是那乙個接受者執行的。
2、可擴充套件性。
3、可以和其他模式結合使用。
結合責任鏈,實現命令族解析任務。
結合模版方法模式,可以減少command子類的膨脹問題。
缺點:那就是類膨脹問題。
類圖如下:
**實現如下:
light類:
package com.designpatterns.command;
public class light
public void off()
}
command抽象類:
package com.designpatterns.command;
public inte***ce command
lightoncommand類:
package com.designpatterns.command;
public class lightoncommand implements command
@override
public void undo()
}
lightoffcommand類:
package com.designpatterns.command;
public class lightoffcommand implements command
@override
public void undo()
}
nocommand類:
package com.designpatterns.command;
public class nocommand implements command
@override
public void undo()
}
控制類:
package com.designpatterns.command;
public class simepleremotecontrol
undocommand = nocommand;
} public void setcommand(int slot, command oncommand, command offcommand)
public void onbuttonwaspressed(int slot)
public void offbuttonwaspressed(int slot)
public void undobuttonwaspushed()
}
測試類:
package com.designpatterns.command;
public class main
}
在上面的**中通過新增undo方法,實現了撤銷上一步操作。
這就是命令模式。
參考資料:
1、設計模式之禪
2、head first 設計模式
設計模式之命令設計模式
先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...
設計模式之命令模式
command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...
設計模式之命令模式
當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...