JAVA设计模式第六章:命令模式

命令模式

在这里插入图片描述

  1. 命令模式在设计模式中属于行为型模式;
  2. 在日常开发中也是比较常用的模式,只是可能我们没有意识到这属于命令模式;
  3. 命令模式主要关注点在于请求发送方和请求接收方的解耦;
  4. 命令模式基于java多态的特性,非常简单;

在日常生活中也存在命令模式的原型,比如说电视机和遥控器:

  1. 遥控器发送请求;
  2. 电视机接收请求;
  3. 电视机和遥控器是解耦的;

代码使用命令模式模拟电视机和遥控器

/**
 * 命令接口
 */
public interface Cmd {

    /**
     * 执行
     */
    void execute();
}

/**
 * 电视机
 *
 * @author cans
 * @date 2022/5/8
 **/
public class Tv {

    private int sound = 0;

    /**
     * 调大音量
     */
    public synchronized void soundUp() {
        sound++;
        System.out.println("调大音量,当前音量: " + sound);
    }

    /**
     * 调小音量
     */
    public synchronized void soundDown() {
        sound--;
        System.out.println("调小音量,当前音量: " + sound);
    }
}
/**
 * 音量调大命令
 *
 * @author cans
 * @date 2022/5/8
 **/
public class SoundDownCmdImpl implements Cmd {

    private final Tv tv;

    public SoundDownCmdImpl(Tv tv) {
        this.tv = tv;
    }

    @Override
    public void execute() {
        tv.soundDown();
    }
}
/**
 * 音量调大命令
 *
 * @author cans
 * @date 2022/5/8
 **/
public class SoundUpCmdImpl implements Cmd {

    private final Tv tv ;

    public SoundUpCmdImpl(Tv tv) {
        this.tv = tv;
    }

    @Override
    public void execute() {
        tv.soundUp();
    }
}

/**
 * 遥控器
 *
 * @author cans
 * @date 2022/5/8
 **/
public class Control {

    public static void call(Cmd cmd) {
        cmd.execute();
    }


    public static void main(String[] args) {
        Tv tv = new Tv();
        Cmd cmd1 = new SoundUpCmdImpl(tv);
        Cmd cmd2 = new SoundDownCmdImpl(tv);

        Control.call(cmd1);
        Control.call(cmd2);
    }


}

执行结果:
调大音量,当前音量: 1
调小音量,当前音量: 0

总结

命令模式其实很简单
其核心就在于使用java多态的特性将动作封装在一个接口中
根据不同的实现类展现执行不同动作

当然这个代码只是最简单的实现,在现实不同的开发场景中还需要结合需求场景进行优化;
比如在前后端分离的开发模式下,前端不能将java对象直接传递给后端
这里就可以参考springMvc中handler的实现了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值