命令模式应用

嗨,您好!

今天,我将与您分享一种非常出色的编程设计模式。 它有很多用法,是我的最爱之一。 编程设计模式命令具有多种用例。 在这篇文章中,我们将看到如何实现来自现实世界的东西。

我们将使用电子汽车钥匙来打开,关闭门,启用,禁用警报,打开,关闭车库门或打开和关闭汽车的引擎盖和行李箱。

我将向您展示的示例是一个非常普通的示例,因此您随时可以回到这里,并在您的应用程序中使用它。

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

命令模式应用

命令模式应用_命令设计模式的应用相关推荐

  1. java 管理员命令模式_java中命令模式详解和使用方法

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...

  2. 设计模式 命令模式 实例_根据您的命令-命令设计模式

    设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...

  3. java命令模式返回值_JAVA 设计模式 命令模式

    目录 用途 命令模式 (Command) 将一个请求 封装为一个对象,从而使你可以用 不同的请求对客户进行 参数化: 对请求排队或请求日志,以及支持可撤销的操作. 命令模式是一种行为型模式. 结构 图 ...

  4. netflix 模式创新_创新设计模式:单例模式

    netflix 模式创新 单例设计模式是一种软件设计模式,用于将类的实例化限制为一个对象. 与其他创建设计模式(例如抽象工厂 , 工厂和构建器模式)相比,单例将创建一个对象,但也将负责,因此该对象只有 ...

  5. netflix 模式创新_创新设计模式:工厂模式

    netflix 模式创新 以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族. 下一个模式是Factory模式 . 当涉及到Java时,工厂模式是最常用的模式之一. 那么工厂模式到底是什么 ...

  6. curl命令详解_命令行学习(一)基础命令

    多数前端工具,只提供命令行界面,没有图形界面,实际上,先有的命令行,才有的图形界面 命令行释义:https://explainshell.com/explain 1. ~ / . .. $ 的意思 ~ ...

  7. java 命令行 配置文件_命令行玩JAVA : 完善ANT的配置文件

    3.1 编写功能完善的配置文件 进一步用好ANT,现在开始学习ANT的配置文件build.xml的详细用法,. 3.1.1 创建工程目录 命令行效果如下: song@ubuntu:~$ cd proj ...

  8. 访客模式 无痕模式 区别_行为设计模式:访客

    访客模式 无痕模式 区别 行为设计模式的最后一个模式将是访客模式. 当我们希望能够在不更改类的情况下为对象结构的类定义新操作时,使用访问者模式. 想象一下执行对api的http请求的软件的场景. 大多 ...

  9. delphi生产者消费者模式代码_并发设计模式:生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

最新文章

  1. 深入讨论.NET Socket的Accept方法
  2. 10年测试工程师首谈测试前景,如何25天进入滴滴大厂
  3. 增加CentOS File Descriptors
  4. puppet 执行source
  5. *[topcoder]TheTree
  6. java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
  7. Get data from file(xxx.png) failed!
  8. 微软ODBC服务器驱动,解决安装SQL Server时[Microsoft][ODBC 驱动程序管理器] 未发现数据源的问题...
  9. CF468B Two Sets
  10. Matplotlib——绘制图表
  11. ASP.NET MVC中使用Autofac实现简单依赖注入
  12. ctfshow-萌新-web11( 利用命令执行漏洞获取网站敏感文件)
  13. EasyUI系列学习(一)-入门
  14. 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
  15. java test30009_java求助
  16. python安装itchat包_Python与微信——itchat包
  17. iOS 新浪微博-1.1框架升级
  18. 决策树算法的Python实现—基于金融场景实操
  19. JavaScript复习笔记
  20. 818打响,家电第一渠道苏宁下一步目标是什么?

热门文章

  1. P3203-[HNOI2010]弹飞绵羊【分块】
  2. nssl1231-Gift【01背包,dp】
  3. 2018/7/12-纪中某C组题【jzoj4272,jzoj4273,jzoj4274】
  4. ssl初一组周六模拟赛【2018.4.21】
  5. YL杯超级篮球赛(jzoj 1325)
  6. Spring Boot面试题(2020最新版)
  7. Hadoop入门(十八)Mapreduce的倒排索引程序
  8. MySQL month()函数
  9. Shell入门(四)之数组
  10. js的三元表达式用来替换表格中的颜色