什么是命令模式
将对象中的行为抽象成具体的命令对象,通过调用者类接收不同的命令行为进行执行
示例图
![](https://img.haomeiwen.com/i25887870/098c6288877000cb.png)
示例场景
按下键盘w s按键操作游戏人物向前 向后走
示例代码
1.创建GameCaractersReceiver游戏人物类(命令接收者)
public class GameCaractersReceiver {
public void actionW() {
System.out.println("游戏人物向前走");
}
public void actionS() {
System.out.println("游戏人物向后走");
}
}
2.创建Command命令抽象类
public abstract class Command {
GameCaractersReceiver gameCaractersReceiver;
public Command(GameCaractersReceiver gameCaractersReceiver) {
this.gameCaractersReceiver = gameCaractersReceiver;
}
abstract void execute();
}
3.创建WCommand 向前走 SCommand向后走具体实现类
public class WCommand extends Command {
public WCommand(GameCaractersReceiver gameCaractersReceiver) {
super(gameCaractersReceiver);
}
@Override
void execute() {
gameCaractersReceiver.actionW();
}
}
public class SCommand extends Command {
public SCommand(GameCaractersReceiver gameCaractersReceiver) {
super(gameCaractersReceiver);
}
@Override
void execute() {
gameCaractersReceiver.actionS();
}
}
4.创建KeyboardInvoker 键盘类(调用者)
public class KeyboardInvoker {
public void sendActionInstruct(Command command){
command.execute();
}
}
5.启动类
public class Test {
public static void main(String[] args) {
//接收命令者-游戏人物
GameCaractersReceiver gameCaractersReceiver = new GameCaractersReceiver();
//调用者-键盘
KeyboardInvoker keyboardInvoker = new KeyboardInvoker();
//发送命令游戏人物向前走
keyboardInvoker.sendActionInstruct(new WCommand(gameCaractersReceiver));
//发送命令游戏人物向后走
keyboardInvoker.sendActionInstruct(new SCommand(gameCaractersReceiver));
}
}
6.运行结果
![](https://img.haomeiwen.com/i25887870/c4b73e61beede188.png)
网友评论