zoukankan      html  css  js  c++  java
  • 设计模式之命令模式

    命令模式

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

    代码:(以录音机为例)

    录音机类:具体方法实现

    public class AudioPlayer {
        
        public void play(){
            System.out.println("播放...");
        }
        
        public void rewind(){
            System.out.println("倒带...");
        }
        
        public void stop(){
            System.out.println("停止...");
        }
    }

    命令接口:

    public interface Command {
        /**
         * 执行方法
         */
        public void execute();
    }

    具体命令实现:等等

    public class PlayCommand implements Command {
    
        private AudioPlayer myAudio;
        
        public PlayCommand(AudioPlayer audioPlayer){
            myAudio = audioPlayer;
        }
        /**
         * 执行方法
         */
        @Override
        public void execute() {
            myAudio.play();
        }
    
    }
    。。。。。

    宏命令接口:

    public interface MacroCommand extends Command {
        /**
         * 宏命令聚集的管理方法
         * 可以添加一个成员命令
         */
        public void add(Command cmd);
        /**
         * 宏命令聚集的管理方法
         * 可以删除一个成员命令
         */
        public void remove(Command cmd);
    }

    宏命令接口实现:

    public class MacroAudioCommand implements MacroCommand {
        
        private List<Command> commandList = new ArrayList<Command>();
        /**
         * 宏命令聚集管理方法
         */
        @Override
        public void add(Command cmd) {
            commandList.add(cmd);
        }
        /**
         * 宏命令聚集管理方法
         */
        @Override
        public void remove(Command cmd) {
            commandList.remove(cmd);
        }
        /**
         * 执行方法
         */
        @Override
        public void execute() {
            for(Command cmd : commandList){
                cmd.execute();
            }
        }
    
    }

    键盘类:

    public class Keypad {
        private Command playCommand;
        private Command rewindCommand;
        private Command stopCommand;
        
        public void setPlayCommand(Command playCommand) {
            this.playCommand = playCommand;
        }
        public void setRewindCommand(Command rewindCommand) {
            this.rewindCommand = rewindCommand;
        }
        public void setStopCommand(Command stopCommand) {
            this.stopCommand = stopCommand;
        }
        /**
         * 执行播放方法
         */
        public void play(){
            playCommand.execute();
        }
        /**
         * 执行倒带方法
         */
        public void rewind(){
            rewindCommand.execute();
        }
        /**
         * 执行播放方法
         */
        public void stop(){
            stopCommand.execute();
        }
    }

    客户端:

    public class Julia {
        
        public static void main(String[]args){
            //创建接收者对象
            AudioPlayer audioPlayer = new AudioPlayer();
            //创建命令对象
            Command playCommand = new PlayCommand(audioPlayer);
            Command rewindCommand = new RewindCommand(audioPlayer);
            Command stopCommand = new StopCommand(audioPlayer);
            
            MacroCommand marco = new MacroAudioCommand();
            
            marco.add(playCommand);
            marco.add(rewindCommand);
            marco.add(stopCommand);
            marco.execute();
        }
    }

    结构:

    作用:

       (1)命令模式使新的命令很容易地被加入到系统里。

      (2)允许接收请求的一方决定是否要否决请求。

      (3)能较容易地设计一个命令队列。

      (4)可以容易地实现对请求的撤销和恢复。

      (5)在需要的情况下,可以较容易地将命令记入日志。

    http://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html

  • 相关阅读:
    Surface RT2装Win10出现 "INF不包含数字签名信息"【已解决】
    树上倍增LCA模版
    sql注入
    python 调用 telnet
    ss
    【总结氵】2021.02.27 省选模拟
    2021.03.13省选模拟 抽卡(card)
    树链剖分之重链剖分 模板
    多项式求逆 模板
    NTT快速数论变换 模板
  • 原文地址:https://www.cnblogs.com/sker/p/5528473.html
Copyright © 2011-2022 走看看