• java设计模式之命令模式


    命令模式:

      对命令的封装,把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

    命令模式涉及到五个角色:

    • 客户端(CommandMain)角色:创建一个具体命令并确定接收者(触发录音机按键者)
    • 命令(Command)角色:声明一个给所有具体命令类的抽象接口(定义一个命令接口)
    • 具体命令(PlayCommand、RewindCommand、StopCommand)角色:实现命令接口,调用录音机的相应操作;
    • 按键(Keypad)角色:负责调用相应命令对象
    • 录音机(AudioPlayer)角色:负责具体实施和执行一个请求。

    录音机类:

    /**
     * 具体工作的类(录音机)
     */
    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 audioPlayer;
    
        public PlayCommand(AudioPlayer audioPlayer) {
            this.audioPlayer = audioPlayer;
        }
    
        @Override
        public void execute() {
            audioPlayer.play();
        }
    }

    倒带命令:

    /**
     * 倒带命令
     */
    public class RewindCommand implements Command {
    
        private AudioPlayer audioPlayer;
    
        public RewindCommand(AudioPlayer audioPlayer) {
            this.audioPlayer = audioPlayer;
        }
    
        @Override
        public void execute() {
            audioPlayer.rewind();
        }
    }

    停止命令:

    /**
     * 停止命令
     */
    public class StopCommand implements Command {
        private AudioPlayer audioPlayer;
    
        public StopCommand(AudioPlayer audioPlayer) {
            this.audioPlayer = audioPlayer;
        }
    
        @Override
        public void execute() {
            audioPlayer.stop();
        }
    }

    按键类:

    **
     * 按键类
     */
    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 pay() {
            playCommand.execute();
        }
    
        /**
         * 执行倒带
         */
        public void rewind() {
            rewindCommand.execute();
        }
    
        /**
         * 执行停止
         */
        public void stop() {
            stopCommand.execute();
        }
    }

    录音机操作类:

    /**
     * 操作按钮-》发送命令给录音机执行具体操作
     */
    public class CommandMain {
    
        public static void main(String[] args) {
            //new 一个录音机
            AudioPlayer audioPlayer = new AudioPlayer();
            //创建播放命令对象
            Command playCommand = new PlayCommand(audioPlayer);
            //创建倒带命令对象
            Command rewindCommand = new RewindCommand(audioPlayer);
            //创建停止命令对象
            Command stopCommand = new StopCommand(audioPlayer);
            //创建按键对象
            Keypad keypad = new Keypad();
            //将播放命令绑定在按键上
            keypad.setPlayCommand(playCommand);
            //将倒带命令绑定在按键上
            keypad.setRewindCommand(rewindCommand);
            //将停止命令绑定在按键上
            keypad.setStopCommand(stopCommand);
            //播放
            keypad.pay();
            //倒带
            keypad.rewind();
            //停止
            keypad.stop();
    
            keypad.pay();
            keypad.stop();
    
        }
    }

    运行结果:

  • 相关阅读:
    Android ExpandableListView的下拉刷新实现
    Android 使用shape来画线
    三种常见的子查询(三十一)
    数据的准备(三十)
    LIMIT语句解析及本章简单回顾(二十九)
    WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)
    查询表达式解析(二十七)
    单表的更新UPDATE和删除记录DELETE(二十六)
    插入记录INSERT(二十五)
    修改数据表——修改列定义和更名数据表(二十四)
  • 原文地址:https://www.cnblogs.com/hujinshui/p/9451984.html
Copyright © 2020-2023  润新知