广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式之命令模式详解
  • 787
分享到

Java设计模式之命令模式详解

2024-04-02 19:04:59 787人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

命令模式 定义:将请求封装成对象,这可以让你使用不同的请求、队列、或者日志来参数化其他对象。 何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。 在被

命令模式

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

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

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

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

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

优点:

1、降低了系统耦合度。

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

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

实现案例

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

1、创建命令接口


package com.example.designpatternsdemo.commandPattern;


public interface Command {
    public void execute();
}

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


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("关闭电视");
    }
}

3、创建具体命令类


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();
    }
}

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

4、创建遥控器类


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();
    }
}

5、创建客户类(测试类)


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设计模式之命令模式详解的文章就介绍到这了,更多相关Java命令模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java设计模式之命令模式详解

本文链接: https://www.lsjlt.com/news/124743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式之命令模式详解
    命令模式 定义:将请求封装成对象,这可以让你使用不同的请求、队列、或者日志来参数化其他对象。 何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。 在被...
    99+
    2022-11-12
  • Java设计模式之java命令模式详解
    目录命令模式的介绍角色订单案例命令模式的优点适用场景示例代码应用宏命令----执行一组命令示例代码总结JDK源码解析 Runable是一个典型命令模式,Runnable担当命令的角色...
    99+
    2022-11-12
  • Java设计模式之命令模式
    本文通过解决老王经常搞错借书人的问题,来引出行为型模式中的命令模式。为了在案例之上理解的更加透彻,我们需要了解命令模式在源码中的应用。最后指出命令模式的应用场景和优缺点。 读者可以拉...
    99+
    2022-11-13
  • JavaScript设计模式之命令模式和状态模式详解
    目录命令模式命令模式介绍代码实现状态模式状态模式介绍代码实现小结命令模式 命令模式介绍 命令模式(Command)的定义是:用于将一个请求封装成一个对象,从而使你可用不同的请求对客户...
    99+
    2022-11-13
  • 深入理解Java设计模式之命令模式
    目录一、什么是命令模式二、命令模式的使用场景三、命令模式的优缺点四、命令模式的实现五、总结一、什么是命令模式 命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你...
    99+
    2022-11-12
  • JavaScript设计模式之命令模式
    命令模式是JavaScript设计模式中行为型的一种设计模式; 定义:向某些对象发送请求,但是并不知道被请求的操作具体是什么,所以我们希望以一种松耦合的方式来设计程序,使得请求发送者...
    99+
    2022-11-12
  • Java 设计模式中的命令模式详情
    目录模式介绍UML类图命令模式案例命令模式的注意事项和细节模式介绍 命令模式(Command Pattern) :在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收...
    99+
    2022-11-13
  • Java以命令模式设计模式
    目录Java以命令模式设计模式1、简单介绍2、命令模式Java以命令模式设计模式 1、简单介绍 意图: 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解...
    99+
    2022-11-12
  • Java超详细讲解设计模式中的命令模式
    目录介绍实现个人理解:把一个类里的多个命令分离出来,每个类里放一个命令,实现解耦合,一个类只对应一个功能,在使用命令时由另一个类来统一管理所有命令。 缺点:如果功能多了就会导致创建的...
    99+
    2022-11-13
  • Java设计模式之java状态模式详解
    目录状态模式的结构状态模式的角色 示例代码适用场景投票案例认识状态模式状态和行为行为的平行性环境和状态处理对象状态模式优点状态模式的缺点状态模式和策略模式对比参考文章 总结...
    99+
    2022-11-12
  • Java设计模式之java策略模式详解
    目录为什么使用策略模式?策略模式包含角色策略模式的类图排序案例策略模式的优点策略模式的缺点适用场景源码分析策略模式的典型应用Java Comparator 中的策略模式参考文...
    99+
    2022-11-12
  • Java设计模式之java桥接模式详解
    目录一、什么是桥接模式:二、UML结构图:三、代码实现:四、JDBC源码解析-桥接模式:1、源码分析:2、源码类图:3、对 JDBC 的观点:参考博客:总结一、什么是桥接模式: 桥接...
    99+
    2022-11-12
  • Java设计模式之java外观模式详解
    目录模式动机模式定义模式结构角色模式分析典型的外观角色代码外观模式实例与解析实例一:电源总开关实例二:文件加密模式优缺点优点缺点模式适用环境源码分析外观模式的典型应用(1) 外观模式...
    99+
    2022-11-12
  • Java设计模式之java组合模式详解
    目录引言组合模式介绍角色模式结构示例代码水果盘文件浏览更复杂的组合模式透明与安全透明组合模式安全组合模式组合模式总结优点缺点适用场景应用XML文档解析文件HashMapMybatis...
    99+
    2022-11-12
  • Java设计模式之java原型模式详解
    目录介绍角色Java语言提供的clone()方法代码演示—克隆羊结论深浅拷贝深浅拷贝探讨实现深克隆的方式一 : 手动对引用对象进行克隆实现深克隆的方式一 :序列化原型模式对单例模式的...
    99+
    2022-11-12
  • 详解Java设计模式之桥接模式
    目录一、什么是桥接模式:二、UML结构图三、代码实现四、JDBC源码解析-桥接模式1、源码分析2、源码类3、对 JDBC 的观点一、什么是桥接模式: 桥接,顾名思义,就是用来连接两个...
    99+
    2022-11-13
  • Java设计模式之装饰模式详解
    目录一、装饰模式引入例子1.1 一般设计1.2 使用继承方式的一般设计存在的问题二、装饰模式2.1 装饰(Decorator)模式中的角色2.2 装饰模式改进设计UML2.3 装饰模...
    99+
    2022-11-12
  • Java设计模式之原型模式详解
    目录一、前言二、优点及适用场景三、原型模式的注意事项四、浅复制和深复制五、浅复制demo演示六、深复制demo演示一、前言 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口...
    99+
    2022-11-12
  • Java设计模式之代理模式详解
    目录一、代理模式二、静态代理三、动态代理一、代理模式 代理模式就是有一个张三,别人都没有办法找到他,只有他的秘书可以找到他。那其他人想和张三交互,只能通过他的秘书来进行转达交互。这个...
    99+
    2022-11-12
  • JAVA设计模式之单例模式详解
    目录前言一、单例模式是什么?二、懒汉式单例三、饿汉式单例四、双重校验锁总结前言 在之前的文章里已经介绍了设计模式以及设计原则的概念,接下来我们从单例模式入手深入学习几种常用的JAVA...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作