命令模式应用_命令设计模式的应用
命令模式应用
嗨,您好!
今天,我将与您分享一种非常出色的编程设计模式。 它有很多用法,是我的最爱之一。 编程设计模式命令具有多种用例。 在这篇文章中,我们将看到如何实现来自现实世界的东西。
我们将使用电子汽车钥匙来打开,关闭门,启用,禁用警报,打开,关闭车库门或打开和关闭汽车的引擎盖和行李箱。
我将向您展示的示例是一个非常普通的示例,因此您随时可以回到这里,并在您的应用程序中使用它。
UML命令模式
如您所知,我总是通过在UML图上显示类图来启动项目。 这有助于我们以一种精巧,紧凑的方式对其进行概述。
解释细节编程设计
我们的客户是法拉利车主(FerrariCleint)。 它有一个CarKey。 CarKey具有可通过命令配置的通用MicroShip(Involker)。 命令(OpenDoorCommand)本身具有要执行的动作(DoorAction)。 CarKey可以配置do和undo命令。 NullObjectCommand属于Null对象设计模式,在这里也将使用它。 现在让我们在代码中查看实现细节。
指挥与微舰
NullObjectCommand在这里用于避免空指针异常,并且只要未定义任何命令就什么都不执行。
public interface Command {void execute();
}
public class MicroChip {protected Command[] onCommands;protected Command[] offCommands;public MicroChip(int commandQuantity) {onCommands = new Command[commandQuantity];offCommands = new Command[commandQuantity];Command nullObjecCommand = new NullObjectCommand();for (int i = 0; i < commandQuantity; i++) {onCommands[i]=nullObjecCommand;offCommands[i]=nullObjecCommand;}}public void configureCommand(int position, Command on, Command off){onCommands[position]=on;offCommands[position]=off;}public void executeOnCommand(int position){onCommands[position].execute();}public void executeOffCommand(int position){offCommands[position].execute();}protected class NullObjectCommand implements Command{@Overridepublic void execute() {// NULL-OBJECT-PATTERN}}
}
具体的命令和动作
在这里,我们可以看到动作和命令的具体实现。
public class Door {public void on(){System.out.println("Opening car doors...");}public void off(){System.out.println("Closing car doors...");}
}
public class OpenDoorCommand implements Command {private Door door;public OpenDoorCommand(Door door) {this.door = door;}@Overridepublic void execute() {door.on();}
}
public class CloseDoorCommand implements Command {private Door door;public CloseDoorCommand(Door door) {this.door =door;}@Overridepublic void execute() {door.off();}
}
通用微舰
如您在这里看到的,此实现或此MicroShip可以容纳所需数量的命令,并且可以在可能需要的任何情况下重用。 在此MicroShip波纹管中,我只实现了上面的OpenDoorCommand和CloseDoorCommand,因此您可以看到它的强大功能。 像我一样,您可以实现其他命令。这里最酷的事情是执行和撤消操作的能力。 创建所需数量的命令并执行所需的动作。 这种图案的简单和美丽使我着迷。
public class CarKey {private MicroChip microChip;public CarKey() {final int commandQuantity = 5;microChip = new MicroChip(commandQuantity);final Hood hood = new Hood();final OpenHoodCommand openHoodCmd = new OpenHoodCommand(hood);final CloseHoodCommand closeHoodCmd = new CloseHoodCommand(hood);microChip.configureCommand(0, openHoodCmd, closeHoodCmd);final Door door = new Door();final OpenDoorCommand openDoorCmd = new OpenDoorCommand(door);final CloseDoorCommand closeDoorCmd = new CloseDoorCommand(door);microChip.configureCommand(1, openDoorCmd, closeDoorCmd);final Garage garage = new Garage();final OpenGarageCommand openGarageCmd = new OpenGarageCommand(garage);final CloseGarageCommand closeGarageCmd = new CloseGarageCommand(garage);microChip.configureCommand(2, openGarageCmd, closeGarageCmd);final Trunk trunk = new Trunk();final OpenTrunkCommand openTrunkCmd = new OpenTrunkCommand(trunk);final CloseTrunkCommand closeTrunkCmd = new CloseTrunkCommand(trunk);microChip.configureCommand(3, openTrunkCmd, closeTrunkCmd);final Alarm alarm = new Alarm();final EnableAlarmCommand enableAlarmCmd = new EnableAlarmCommand(alarm);final DisableAlarmCommand disableAlarmCmd = new DisableAlarmCommand(alarm);microChip.configureCommand(4, enableAlarmCmd, disableAlarmCmd);}public void openHood(){microChip.executeOnCommand(0);}public void closeHood(){microChip.executeOffCommand(0);}public void openDoor(){microChip.executeOnCommand(1);}public void closeDoor(){microChip.executeOffCommand(1);}public void openGarage(){microChip.executeOnCommand(2);}public void closeGarage(){microChip.executeOffCommand(2);}public void openTrunk(){microChip.executeOnCommand(3);}public void closeTrunk(){microChip.executeOffCommand(3);}public void enableAlarm(){microChip.executeOnCommand(4);}public void disableAlarm(){microChip.executeOffCommand(4);}}
法拉利客户
最后,我们可以看到这种漂亮的设计模式的用法和功能。 在此示例中,我实现了多个命令来向您展示它的外观。
public class FerrariClient {public static void main(String[] args) {final CarKey ferrariSwitchbladeKey = new CarKey();ferrariSwitchbladeKey.openHood();ferrariSwitchbladeKey.openGarage();ferrariSwitchbladeKey.openTrunk();ferrariSwitchbladeKey.openDoor();ferrariSwitchbladeKey.enableAlarm();System.out.println("-------------------------------");ferrariSwitchbladeKey.closeHood();ferrariSwitchbladeKey.closeGarage();ferrariSwitchbladeKey.closeTrunk();ferrariSwitchbladeKey.closeDoor();ferrariSwitchbladeKey.disableAlarm();}
}
就这样。 希望你喜欢!
翻译自: https://www.javacodegeeks.com/2014/08/command-design-pattern-applied.html
命令模式应用
命令模式应用_命令设计模式的应用相关推荐
- java 管理员命令模式_java中命令模式详解和使用方法
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...
- 设计模式 命令模式 实例_根据您的命令-命令设计模式
设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...
- java命令模式返回值_JAVA 设计模式 命令模式
目录 用途 命令模式 (Command) 将一个请求 封装为一个对象,从而使你可以用 不同的请求对客户进行 参数化: 对请求排队或请求日志,以及支持可撤销的操作. 命令模式是一种行为型模式. 结构 图 ...
- netflix 模式创新_创新设计模式:单例模式
netflix 模式创新 单例设计模式是一种软件设计模式,用于将类的实例化限制为一个对象. 与其他创建设计模式(例如抽象工厂 , 工厂和构建器模式)相比,单例将创建一个对象,但也将负责,因此该对象只有 ...
- netflix 模式创新_创新设计模式:工厂模式
netflix 模式创新 以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族. 下一个模式是Factory模式 . 当涉及到Java时,工厂模式是最常用的模式之一. 那么工厂模式到底是什么 ...
- curl命令详解_命令行学习(一)基础命令
多数前端工具,只提供命令行界面,没有图形界面,实际上,先有的命令行,才有的图形界面 命令行释义:https://explainshell.com/explain 1. ~ / . .. $ 的意思 ~ ...
- java 命令行 配置文件_命令行玩JAVA : 完善ANT的配置文件
3.1 编写功能完善的配置文件 进一步用好ANT,现在开始学习ANT的配置文件build.xml的详细用法,. 3.1.1 创建工程目录 命令行效果如下: song@ubuntu:~$ cd proj ...
- 访客模式 无痕模式 区别_行为设计模式:访客
访客模式 无痕模式 区别 行为设计模式的最后一个模式将是访客模式. 当我们希望能够在不更改类的情况下为对象结构的类定义新操作时,使用访问者模式. 想象一下执行对api的http请求的软件的场景. 大多 ...
- delphi生产者消费者模式代码_并发设计模式:生产者-消费者模式,并发提高效率...
生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...
最新文章
- 深入讨论.NET Socket的Accept方法
- 10年测试工程师首谈测试前景,如何25天进入滴滴大厂
- 增加CentOS File Descriptors
- puppet 执行source
- *[topcoder]TheTree
- java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
- Get data from file(xxx.png) failed!
- 微软ODBC服务器驱动,解决安装SQL Server时[Microsoft][ODBC 驱动程序管理器] 未发现数据源的问题...
- CF468B Two Sets
- Matplotlib——绘制图表
- ASP.NET MVC中使用Autofac实现简单依赖注入
- ctfshow-萌新-web11( 利用命令执行漏洞获取网站敏感文件)
- EasyUI系列学习(一)-入门
- 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
- java test30009_java求助
- python安装itchat包_Python与微信——itchat包
- iOS 新浪微博-1.1框架升级
- 决策树算法的Python实现—基于金融场景实操
- JavaScript复习笔记
- 818打响,家电第一渠道苏宁下一步目标是什么?