首页 > 编程语言 >Java设计模式之命令模式

Java设计模式之命令模式

时间:2023-11-26 22:35:46浏览次数:36  
标签:Java name void 模式 device Command Device 设计模式 public

命令模式

介绍

命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。

下面来举个例子

我们在生活中都用过电视机,我们就相当于客户端,要操作电视来换台;而 电视 就是执行请求的对象,要根据我们的操作来换台。但是我们一般不会直接按电视上的按钮来换台,而是用一个 遥控器,通过点击遥控器上的 操作按钮 来控制电视。 这样就相当于把我们和电视解耦了。哪怕遥控器丢了,再换一个遥控器就好了;而且现在手机都能作为万能的电视遥控器,我们可以同时遥控多个品牌的设备,不用关心设备的具体品牌型号,提供了更大的方便。

优点

命令模式最大的优点就是解耦请求发送者和接受者,让系统更加灵活、可扩展。

代码示例

Command.java

public interface Command {
    void execute();
}

Device.java

public class Device {
​
    private String name;
​
    public Device(String name){
        this.name = name;
    }
​
    public void turnOn(){
        System.out.println(name + " 设备打开");
    }
​
    public void turnOff(){
        System.out.println(name + " 设备关闭");
    }
}

RemoteControl.java

public class RemoteControl {
​
    private Command command;
​
    public void setCommand(Command command){
        this.command = command;
    }
​
    public void pressButton(){
        command.execute();
    }
}

TurnOffCommand.java

public class TurnOffCommand implements Command {
​
    private Device device;
​
    public TurnOffCommand(Device device){
        this.device = device;
    }
​
    public void execute(){
        device.turnOff();
    }
}

TurnOnCommand

public class TurnOnCommand implements Command{
    private Device device;
​
    public TurnOnCommand(Device device){
        this.device = device;
    }
​
    public void execute(){
        device.turnOn();
    }
}

Client.java

public class Client {
    public static void main(String[] args) {
        // 创建接收者对象
        Device tv = new Device("TV");
        Device microphone = new Device("Microphone");
​
        // 创建具体命令对象,可以绑定不同设备
        TurnOnCommand turnOn = new TurnOnCommand(tv);
        TurnOffCommand turnOff = new TurnOffCommand(microphone);
​
        // 创建调用者
        RemoteControl remote = new RemoteControl();
​
        // 执行命令
        remote.setCommand(turnOn);
        remote.pressButton();
​
        remote.setCommand(turnOff);
        remote.pressButton();
    }
}

运行结果

image-20231126221809872

UML类图

image-20231126222041355

标签:Java,name,void,模式,device,Command,Device,设计模式,public
From: https://www.cnblogs.com/ysk0904/p/17858098.html

相关文章

  • Java learning Day2 常量 变量 运算符 Scanner 方法 数组
    常量:字面值常量(直接写值的常量)+自定义常量变量:long型变量后必须加L;小数字面值常量默认double 若用float需加F;变量强转:小的会自动转成大的float虽然只有4个字节但是比所有整型的取值范围都大    浮点型有精度问题  表达式类型提升:如果表达式当中存在多种数......
  • 透析Java本质的36个话题03String类
    1.来龙去脉-“+”是怎么连接字符串的?“+”号对String对象的连接OracleJDK1.7的实现: 当使用+字符串拼接,会创建一个临时的StringBuilder对象,该对象调用append连接操作。 类似于StringBuilder.append(s1).append(s2).toString;"+"的性能如果是在循环中对String对象进......
  • Java守护线程
    Java中的线程分为两类,分别为daemon线程(守护线程)和user线程(用户线程)。在JVM启动时会调用main函数,main函数所在的钱程就是一个用户线程。其实在JVM内部同时还启动了很多守护线程,比如垃圾回收线程。那么守护线程和用户线程有什么区别呢?区别之一是当最后一个非守护线程束时,JV......
  • java Math
    packagenet.elaina.math;publicclassTest1{publicstaticvoidmain(String[]args){//abs获取参数绝对值//System.out.println(Math.abs(88));//88//System.out.println(Math.abs(-88));//88//bug://以int类型为......
  • 观察者模式
    1模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易......
  • Java开发者的Python快速进修指南:面向对象进阶
    在上一期中,我们对Python中的对象声明进行了初步介绍。这一期,我们将深入探讨对象继承、组合以及多态这三个核心概念。不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主要区别主要体现在语法上。例如,Python支持多重继承,这意味着一个类可以同时继承多个父类的属性......
  • Java开发者的Python快速进修指南:面向对象--高级篇
    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是有专门的方法来实现。最后,我......
  • Linux桥接模式无网络的坑
    Linux虚拟机是VMware装的CentOS764位,从NAT模式(网络正常)改到了桥接模式,就是上不去网,排查如下:0.更改乔迁模式: 1.输入命令:vim/etc/sysconfig/network-scripts/ifcfg-ens33 发现ONBOOT是yes没问题。2.曾经将桥接模式的自动改成Inter开头的那个,无效 3.死......
  • 企业集成模式-第十章
    十、消息传递端点10.1引言1)发送和接收模式某些端点模式即适用于发送者,也适用于接收者。它们通常涉及如何把应用与消息传递系统联系起来。封装消息传递代码:大多数应用的代码在编写时没有考虑消息传递问题。当应用需要与其他程序集成时,应该由一个很瘦的代码层实现应用的集成功......
  • Java基于springboot+vue开发服装商城小程序
    还可以改成其他商城哦。主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的订单,收货地址,编辑资料等。管理员可以发布商品,上下架商品,处理订单。 演示视频:小程序https://www.bilibili.com/video/BV1rM411o7m4/?share_source=copy_web&vd_......