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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

10_命令模式

發(fā)布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10_命令模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【命令模式】

命令模式是一個高內(nèi)聚的模式。

將一個請求封裝成一個對象,從而讓你使用不用的請求將客戶端參數(shù)化,對請求排隊或者記錄請求日志,提供命令的撤銷和恢復(fù)功能。

命令模式由以下4部分組成:

1.Receiver接受者角色

該角色是具體做事的角色,命令傳遞到這里被執(zhí)行。

2.Command抽象命令角色

需要執(zhí)行的命令在這里聲明。

3.ConcreteCommand具體命令角色

通常會關(guān)聯(lián)接受者(例子里的游戲人物:戰(zhàn)士角色類),并調(diào)用接受者的功能來完成具體的操作。

4.Invoker調(diào)用者角色

接受到命令,并執(zhí)行命令。(例子中的游戲玩家)

?

命令模式較為簡單,它的封裝性較好,把請求方(Invoker)和執(zhí)行方(接收方,Receiver)分開,保證了其擴展性。

?

【命令模式 例子】

package com.Higgin.Command;/*** 接受者角色:Receiver* 游戲中的戰(zhàn)士類*/ class Soldier{public void shoot(){System.out.println("戰(zhàn)士射擊!!!");}public void run(){System.out.println("戰(zhàn)士奔跑!!!");} }/*** 命令角色:Command* 抽象命令角色*/ interface Command{public void execute(); }/*** 具體命令角色:ConcreteCommand* 具體的射擊命令角色*/ class ConcreteShootCommand implements Command{private Soldier soldier; //關(guān)聯(lián)戰(zhàn)士角色類public ConcreteShootCommand(Soldier soldier){this.soldier=soldier;}@Overridepublic void execute() {this.soldier.shoot();} } /*** 具體命令角色:ConcreteCommand* 具體的奔跑命令角色*/ class ConcreteRunCommand implements Command{private Soldier soldier; //關(guān)聯(lián)戰(zhàn)士角色類public ConcreteRunCommand(Soldier soldier){this.soldier=soldier;}@Overridepublic void execute() {this.soldier.run();} }/*** 調(diào)用者角色:Invoker* 游戲玩家角色*/ class GamePlayer{private Command shootCommand; //射擊命令private Command runCommand; //奔跑命令public void setShootCommand(Command shootCommand) {this.shootCommand = shootCommand;}public void setRunCommand(Command runCommand) {this.runCommand = runCommand;}public void shoot(){ this.shootCommand.execute();}public void run(){this.runCommand.execute();} }public class TestCommand {public static void main(String[] args) {Soldier soldier=new Soldier(); //戰(zhàn)士角色GamePlayer gamePlayer=new GamePlayer(); //游戲玩家角色 Command shootCommand=new ConcreteShootCommand(soldier); //射擊命令 gamePlayer.setShootCommand(shootCommand);gamePlayer.shoot();Command runCommand=new ConcreteRunCommand(soldier); //奔跑命令 gamePlayer.setRunCommand(runCommand);gamePlayer.run();} }

【運行結(jié)果】

?

【優(yōu)點】

* 類間解耦

調(diào)用者和接收者之間沒有任何依賴關(guān)系。調(diào)用者實現(xiàn)功能時只需調(diào)用Command抽象類的execute方法即可,不需要了解到底哪個是接收者。

* 可擴展性

Command類的子類ConcreteCommand具體命令角色可以非常容易地擴展,而調(diào)用者Invoker和高層次的模塊Client不產(chǎn)生嚴重的代碼耦合問題。

* 命令模式結(jié)合其他模式會更優(yōu)秀

命令模式可以結(jié)合責(zé)任鏈模式,實現(xiàn)命令族解析任務(wù)。

也可以結(jié)合模板方法模式,則可以減少Command子類的膨脹問題。

?

【缺點】

如果有N個命令,Command的子類就會是N個,會使得這個子類數(shù)量膨脹地非常多。

?

轉(zhuǎn)載于:https://www.cnblogs.com/HigginCui/p/6222345.html

總結(jié)

以上是生活随笔為你收集整理的10_命令模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。