美文网首页
命令模式

命令模式

作者: 要学的东西太多了 | 来源:发表于2018-11-02 15:17 被阅读0次

1.命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

2.命令模式分为5个角色,抽象命令,具体命令,请求者,执行者,客户端。常见的键盘操作就是这种模式,键盘是请求者,持有具体的命令,游戏等软件是执行者,操作的人就是客户端。

3.命令模式的优点:
●  更松散的耦合
命令模式使得发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦,也就是说发起命令的对象完全不知道具体实现对象是谁,也不知道如何实现。

●  更动态的控制
  命令模式把请求封装起来,可以动态地对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。

●  很自然的复合命令
  命令模式中的命令对象能够很容易地组合成复合命令,也就是宏命令,从而使系统操作更简单,功能更强大。

●  更好的扩展性
  由于发起命令的对象和具体的实现完全解耦,因此扩展新的命令就很容易,只需要实现新的命令对象,然后在装配的时候,把具体的实现对象设置到命令对象中,然后就可以使用这个命令对象,已有的实现完全不用变化。

示例如下:

public class Command {
    public static void main(String[] args){
        Command command=new Command();
        Game game=command.new Game();
        IGameCommand left=command.new GameLeftCommand(game);
        IGameCommand right=command.new GameRightCommand(game);
        IGameCommand jump=command.new GameJumpCommand(game);
        Invoke invoke = command.new Invoke();
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        System.out.println("请输入命令:");
        while (scanner.hasNext()){
            String next= scanner.next();
            switch (next){
                case "1":
                    invoke.setiGameCommand(left);
                    invoke.execute(random.nextInt(10));
                    break;
                case "2":
                    invoke.setiGameCommand(right);
                    invoke.execute(random.nextInt(10));
                    break;
                case "3":
                    invoke.setiGameCommand(jump);
                    invoke.execute(0);
                    break;
                case "0":
                    System.out.println("退出");
                    System.exit(0);
                    break;
                default:
                    System.out.println("未知命令");
                    break;
            }
        }
    }

    class Game{
        public void goLeft(int step){
            System.out.println("向左走"+ step+"步");
        }
        public void goRight(int step){
            System.out.println("向右走"+ step+"步");
        }
        public void jump(int step){
            System.out.println("跳起来");
        }
    }

    interface IGameCommand{
        void execute(int step);
    }

    class GameCommand{
        protected Game game;
        public GameCommand(Game game) {
            this.game = game;
        }
    }

    class GameLeftCommand extends GameCommand implements IGameCommand{
        public GameLeftCommand(Game game) {
            super(game);
        }

        @Override
        public void execute(int step) {
            game.goLeft(step);
        }
    }

    class GameRightCommand extends GameCommand implements IGameCommand{
        public GameRightCommand(Game game) {
            super(game);
        }

        @Override
        public void execute(int step) {
            game.goRight(step);
        }
    }

    class GameJumpCommand extends GameCommand implements IGameCommand{
        public GameJumpCommand(Game game) {
            super(game);
        }

        @Override
        public void execute(int step) {
            game.jump(step);
        }
    }

    class Invoke{
        private IGameCommand iGameCommand;

        public void setiGameCommand(IGameCommand iGameCommand) {
            this.iGameCommand = iGameCommand;
        }

        public void execute(int step){
            iGameCommand.execute(step);
        }
    }

}

相关文章

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 设计模式详解——命令模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之命令模式。 一、命令模式的概念 命令模式...

  • Vi编辑器

    命令模式 文本输入模式 末行模式。 插入模式 移动光标: 删除命令: 撤销命令: 重复命令 文本行移动: 复制粘贴...

  • JavaScript设计模式七(命令模式)

    JavaScript设计模式七(命令模式) 定义: 命令模式是最简单和优雅的模式之一,命令模式中的命令指的是一个执...

  • Cisco 路由器配置命令大全(二)

    (1)模式转换命令 用户模式----特权模式,使用命令"enable"特权模式----全局配置模式,使用命令"co...

网友评论

      本文标题:命令模式

      本文链接:https://www.haomeiwen.com/subject/qgfcxqtx.html