Swift 4中的命令模式

命令模式将请求封装为对象,从而使您可以将具有不同请求,队列或日志请求的客户端参数化,并支持不可撤销的操作。

当需求类似时,命令模式很有用–会有很多操作要做一个接一个的操作。 考虑到每个操作都非常耗时,因此您不能直接调用执行该操作的方法。 传入操作请求的速率高于整理每个操作。 要处理这种情况,您需要将每个操作/命令封装在一个对象(又称为命令对象)中,并将它们存储在队列中。 然后依次处理从队列中取出的每个命令。 这一切都与命令模式有关。 命令模式在日志记录框架,数据库事务和计划的操作中有多种用法。

Command模式的另一个不错的方面是Command Executor (可以是单独的线程)不需要知道命令以及与要执行的命令相关的上下文信息。 这样,可以随时构建更多的命令/操作,而无需更改已编写的现有代码。

类型:创作模式

也称为:动作,交易

结构体:

Swift 4实现:

我们的上下文将是一个Book对象,我们要在其上执行不同类型的命令。 将有3种命令类型: Buy,Sell,GiftFriend

  1. BuyCommand:从图书馆购买书籍,然后将所有者设置为我。
  2. SellCommand:将书籍出售到图书馆,并将所有者设置为图书馆。
  3. GiftFriend:将书赠给提到名字的朋友。

让我们编写上下文类Book。 您可能会对Book类中的buy(),sell(),giftFriend()之类的方法感到惊讶,并问自己这些方法应包含在命令类中。 没有! Command对象将调用这些方法,因为这些方法将执行实际任务。

如前所述,三种命令类:

CommandExecutor负责一个接一个地运行命令。 它可能是一个不同的线程,但是为了简洁起见,在这里我们使用了while循环和runCommand()方法,它将一个接一个地运行所有命令,直到命令队列结束。

现在像往常一样,感受命令模式的力量。

您可以在此处找到完整的源代码:Github