命令模式

2021-05-23  本文已影响0人  金煜博

什么是命令模式

将对象中的行为抽象成具体的命令对象,通过调用者类接收不同的命令行为进行执行

示例图

图片.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.运行结果


图片.png
上一篇 下一篇

猜你喜欢

热点阅读