文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在Java中使用命令模式

2023-06-14 21:07

关注

如何在Java中使用命令模式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

java基本数据类型有哪些

Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。

命令模式

定义:将请求封装成对象,这可以让你使用不同的请求、队列、或者日志来参数化其他对象。

何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。

在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。

调用者通过调用命令对象的execute()方法发出请求,这会使接收者的动作被调用。

调用者可以接收命令当作参数,甚至在运行时动态地进行。

优点:

降低了系统耦合度。

新的命令可以很容易添加到系统中去。

缺点:使用命令模式可能会导致某些系统有过多的具体命令类。

实现案例

需求:实现一个遥控器类,遥控器有多组开/关按钮,每组按钮控制一个电器对象的开和关。使用命令模式实现整个功能。

创建命令接口

package com.example.designpatternsdemo.commandPattern;public interface Command {    public void execute();}

创建电灯、电视类(命令接收者)

package com.example.designpatternsdemo.commandPattern;public class Light {//on/off动作    public void on(){        System.out.println("开启电灯");    }    public void off(){        System.out.println("关闭电灯");    }}
package com.example.designpatternsdemo.commandPattern;public class TV {    public void on(){        System.out.println("开启电视");    }    public void off(){        System.out.println("关闭电视");    }}

创建具体命令类

package com.example.designpatternsdemo.commandPattern;public class LightOnCommand implements Command{    //电灯对象    private Light mLight;    public LightOnCommand(Light light){        this.mLight = light;    }    @Override    public void execute() {        mLight.on();    }}
package com.example.designpatternsdemo.commandPattern;public class LightOffCommand implements Command{    //电灯对象    private Light mLight;    public LightOffCommand(Light light){        this.mLight = light;    }    @Override    public void execute() {        mLight.off();    }}

这里省略电视的开关命令类

创建遥控器类

package com.example.designpatternsdemo.commandPattern;public class RemoteControl {    //保存开关命令对象的数组    Command[] onCommands;    Command[] offCommands;    public RemoteControl(){        //初始化数组        onCommands = new Command[2];        offCommands = new Command[2];    }    //存储命令    public void setCommand(int index,Command onCommand,Command offCommand){        onCommands[index] = onCommand;        offCommands[index] = offCommand;    }    //开按钮    public void onButtonPress(int btnIndex){        onCommands[btnIndex].execute();    }    //关按钮    public void offButtonPress(int btnIndex){        offCommands[btnIndex].execute();    }}

创建客户类(测试类)

package com.example.designpatternsdemo.commandPattern;public class Client {    public static void main(String[] args) {        //创建电灯对象(命令接收者)        Light myLight = new Light();        //创建电灯开关命令对象        LightOnCommand lightOnCommand = new LightOnCommand(myLight);        LightOffCommand lightOffCommand = new LightOffCommand(myLight);        //创建遥控器对象(命令调用者)        RemoteControl remoteControl = new RemoteControl();        //设置命令        remoteControl.setCommand(0,lightOnCommand,lightOffCommand);        //发起命令执行请求        remoteControl.onButtonPress(0);        remoteControl.offButtonPress(0);        TV myTv = new TV();        TvOnCommand tvOnCommand = new TvOnCommand(myTv);        TvOffCommand tvOffCommand = new TvOffCommand(myTv);        remoteControl.setCommand(1,tvOnCommand,tvOffCommand);        remoteControl.onButtonPress(1);        remoteControl.offButtonPress(1);    }}

将开/关电灯、电视的请求封装成命令类对象,在类中的execute()方法调用具体电灯/电视的开关动作,调用时,遥控器类(命令调用者)只需调用具体某个命令对象的execute()方法,那他就会通知具体的电器来执行动作,这样,就实现了命令调用者和执行者之间的解耦。调用者不需要知道是谁执行动作,只需要调用命令对象的execute()方法去通知执行就可以。

关于如何在Java中使用命令模式问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯