命令模式定義:將請求封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。
應用場景:某公司需要製作有6個插槽的遙控器,遙控器上每個插槽對應兩個按鈕,分別是開和關,用來控制使用者屋內的各種裝置的開關,包括電燈、微波爐等等,他們希望,電燈或者其他裝置的插頭插進遙控器的任意乙個插槽,遙控器都能實現對該裝置的控制。
**檔案:
各種電燈的統一介面:
package com.design.command;
/** * 各種電燈的統一介面
* @author administrator
* */
public inte***ce light
接下來,我們實現兩種電燈裝置,一種的是屋外的燈,還有一種屋內的燈
package com.design.command;
/** * 門外的燈
* @author administrator
* */
public class outdoorlight implements light
/*** 關燈
*/public void off()
}
package com.design.command;
/** * 屋內的燈
* @author administrator
* */
public class innerdoorlight implements light
/*** 關燈
*/public void off()
}
接下來,設定乙個命令的統一介面,以便後續新增命令可用:
package com.design.command;
/** * 各種命令的統一介面
* @author administrator
* */
public inte***ce command
實現該介面,用做電燈請求命令:
package com.design.command;
public class lightcommand implements command
/*** 開燈
*/public void on()
/*** 關燈
*/public void off()
public light getlight()
public void setlight(light light)
}
我們做下測試:
package com.design.command;
/** * 測試類
* @author administrator
* */
public class commandtest
}
測試結果:
從測試**中,可以看出,使用者無需關注命令如果處理被請求者,使用者只需發出命令即可。這也實現了使用者與裝置之間的解耦。
設計模式之命令設計模式
先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...
設計模式之命令模式
command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...
設計模式之命令模式
當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...