行为型-命令模式

223 阅读1分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

1.什么是命令模式

命令是一种行为设计模式, 它可将请求或简单操作转换为一个对象。

image.png

2.案例

2.1 抽象命令

/**
 * com.example.design.behavior.command.v2
 * Description:
 *
 * @author jack
 * @date 2021/6/2 4:56 下午
 */
public interface Command {

    /**
     * 执行方法
     */
    void execute();

}

2.2 具体命令

/**
 * com.example.design.behavior.command.v2
 * Description:
 * 录音机播放命令
 *
 * @author jack
 * @date 2021/6/2 4:56 下午
 */
public class PlayCommand implements Command {

    private final AudioPlayer audioPlayer;

    public PlayCommand(AudioPlayer audioPlayer) {
        this.audioPlayer = audioPlayer;
    }

    @Override
    public void execute() {
        audioPlayer.play();
    }
}

/**
 * com.example.design.behavior.command.v2
 * Description:
 * 录音机倒带命令
 *
 * @author jack
 * @date 2021/6/2 4:57 下午
 */
public class RewindCommand implements Command {

    private AudioPlayer audioPlayer;

    public RewindCommand(AudioPlayer audioPlayer) {
        this.audioPlayer = audioPlayer;
    }

    @Override
    public void execute() {
        audioPlayer.rewind();
    }
}

/**
 * com.example.design.behavior.command.v2
 * Description:
 * 录音机停止命令
 *
 * @author jack
 * @date 2021/6/2 4:59 下午
 */
public class StopCommand implements Command {

    private final AudioPlayer audioPlayer;

    public StopCommand(AudioPlayer audioPlayer) {
        this.audioPlayer = audioPlayer;
    }

    @Override
    public void execute() {
        audioPlayer.stop();
    }
}

2.3 接收者


/**
 * com.example.design.behavior.command.v2
 * Description:
 * 接受者角色
 *
 * @author jack
 * @date 2021/6/2 4:53 下午
 */
public class AudioPlayer {

    public void play() {
        System.out.println("播放...");
    }

    public void rewind() {
        System.out.println("倒带...");
    }

    public void stop() {
        System.out.println("停止...");
    }

}

2.4 请求者


/**
 * com.example.design.behavior.command.v2
 * Description:
 * 请求者角色
 *
 * @author jack
 * @date 2021/6/2 5:00 下午
 */
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();
    }

}

3.测试


/**
 * com.example.design.behavior.command.v2
 * Description:
 *
 * @author jack
 * @date 2021/6/2 5:01 下午
 */
public class Client {
    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);
        //创建请求者对象
        Keypad keypad = new Keypad();
        keypad.setPlayCommand(playCommand);
        keypad.setRewindCommand(rewindCommand);
        keypad.setStopCommand(stopCommand);
        //测试
        keypad.play();
        keypad.rewind();
        keypad.stop();
        keypad.play();
        keypad.stop();
    }
}

image.png