命令设计模式(行为型设计模式)

命令设计模式是一种行为型模式,它将请求封装成命令对象,使调用者与接收者解耦。在空调控制系统中,通过创建不同的具体命令(如开、关、制冷、制热)来实现对空调的控制,请求者(AppInvoker)通过调用命令对象的execute方法执行相应操作。这种模式便于扩展新的命令,降低了系统耦合度。
摘要由CSDN通过智能技术生成

一、命令设计模式简介

命令设计模式(Command Pattern)

  • 请求以命令的形式包裹在对象中,并传给调⽤对象。调用对象寻找可以处理该命令的对象,并把该命令传给相应的对象执⾏命令,属于行为型模式
  • 命令模式是⼀种特殊的策略模式,体现的是多个策略执⾏的问题,⽽不是选择的问题

应用场景 

  • 只要是你认为是命令的地⽅,就可以采⽤命令模式
  • 日常每个界⾯、按钮、键盘 事件操作都是命令设计模  

角色 

  • 抽象命令(Command):需要执⾏的所有命令都在这⾥声明
  • 具体命令(ConcreteCommand):定义⼀个接收者和⾏ 为之间的弱耦合,实现execute()⽅法,负责调⽤接收者的相应操作,execute()⽅法通常叫做执⾏⽅法。
  • 接受者(Receiver):负责具体实施和执⾏⼀个请求,⼲活的⻆⾊,命令传递到这⾥是应该被执⾏的,实施和执⾏请求的⽅法叫做⾏动⽅法
  • 请求者(Invoker):负责调⽤命令对象执⾏请求,相关的⽅法叫做⾏动⽅法
  • 客户端(Client):创建⼀个具体命令 (ConcreteCommand)对象并确定其接收者。

 二、优缺点

优点:

  • 调⽤者⻆⾊与接收者⻆⾊之间没有任何依赖关系,不需要了解到底是哪个接收者执⾏,降低了系统耦合度
  • 扩展性强,新的命令可以很容易添加到系统中去。

缺点:

  • 过多的命令模式会导致某些系统有过多的具体命令类 

三、代码实现 

/**
 * 接收器,里面有具体的命令
 */
public class HavcReceiver {
    public void on(){
        System.out.println("空调开启");
    }
    public void off(){
        System.out.println("空调关闭");
    }
    public void cool(){
        System.out.println("空调制冷开启");
    }
    public void warm(){
        System.out.println("空调制热开启");
    }
}
/**
 * 抽象命令
 */
public interface Command {
    /**
     * 执行动作
     */
    void execute();
}
/**
 * 具体命令
 */
public class OnCommand implements Command{
    /**
     * 对哪个命令进行处理
     */
    private HavcReceiver havcReceiver;

    public OnCommand(HavcReceiver havcReceiver){
        this.havcReceiver = havcReceiver;
    }
    /**
     * 执行动作
     */
    @Override
    public void execute() {
        System.out.println("OnCommand-->execute");
        havcReceiver.on();
    }
}

/**
 * 具体命令
 */
public class OffCommand implements Command{
    /**
     * 对哪个命令进行处理
     */
    private HavcReceiver havcReceiver;

    public OffCommand(HavcReceiver havcReceiver){
        this.havcReceiver = havcReceiver;
    }
    /**
     * 执行动作
     */
    @Override
    public void execute() {
        System.out.println("OffCommand-->execute");
        havcReceiver.off();
    }
}

/**
 * 具体命令
 */
public class CoolCommand implements Command{
    /**
     * 对哪个命令进行处理
     */
    private HavcReceiver havcReceiver;

    public CoolCommand(HavcReceiver havcReceiver){
        this.havcReceiver = havcReceiver;
    }
    /**
     * 执行动作
     */
    @Override
    public void execute() {
        System.out.println("CoolCommand-->execute");
        havcReceiver.cool();
    }
}

/**
 * 具体命令
 */
public class WarmCommand implements Command{
    /**
     * 对哪个命令进行处理
     */
    private HavcReceiver havcReceiver;

    public WarmCommand(HavcReceiver havcReceiver){
        this.havcReceiver = havcReceiver;
    }
    /**
     * 执行动作
     */
    @Override
    public void execute() {
        System.out.println("WarmCommand-->execute");
        havcReceiver.warm();
    }
}
/**
 * 请求者,里面关联具体命令对象,包含命令方法
 */
public class AppInvoker {
    private Command onCommand;
    private Command offCommand;
    private Command collCommand;
    private Command warmCommand;

    public Command getOnCommand() {
        return onCommand;
    }

    public void setOnCommand(Command onCommand) {
        this.onCommand = onCommand;
    }

    public Command getOffCommand() {
        return offCommand;
    }

    public void setOffCommand(Command offCommand) {
        this.offCommand = offCommand;
    }

    public Command getCollCommand() {
        return collCommand;
    }

    public void setCollCommand(Command collCommand) {
        this.collCommand = collCommand;
    }

    public Command getWarmCommand() {
        return warmCommand;
    }

    public void setWarmCommand(Command warmCommand) {
        this.warmCommand = warmCommand;
    }

    /**
     * 开机
     */
    public void on(){onCommand.execute();}
    /**
     * 关机
     */
    public void off(){offCommand.execute();}
    /**
     * 制冷
     */
    public void coll(){collCommand.execute();}
    /**
     * 制热
     */
    public void warm(){warmCommand.execute();}
}
/**
*命令设计模式
*/
public class Main {
    public static void main(String[] args) {
        //请求者
        AppInvoker appInvoker = new AppInvoker();
        //接收者
        HavcReceiver havcReceiver = new HavcReceiver();
        appInvoker.setOnCommand(new OnCommand(havcReceiver));
        appInvoker.setOffCommand(new OffCommand(havcReceiver));
        appInvoker.setCollCommand(new CoolCommand(havcReceiver));
        appInvoker.setWarmCommand(new WarmCommand(havcReceiver));
        appInvoker.on();
        appInvoker.coll();
        appInvoker.warm();
        appInvoker.off();
    }
}

 

注释:个人学习观点以作笔记,如有瑕疵望谅解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值