从Swift函数式编程到设计模式(-)

Swift支持函数式编程范式。程序员可以使用Swift写出函数式风格的代码。函数式编程是一种以数学函数为程序语言建模的核心的编程范式。在函数式编程中,函数是核心概念,是“头等公民”,函数被赋予了更多职责,拥有更多灵活的使用方式。这一章可以看到使用函数式编程范式,可以消除一些面向对象编程中使用到的设计模式

高阶函数

高阶函数,指可以将其他函数作为参数或者返回结果的函数。由于高阶函数,我们发现GOF设计模式中命令模式(Command)在Swift中消失了。

命令模式使用对象封装一系列操作(命令),使得操作可以重复使用,也易于在对象间传递。由于Swift仍然主要是一门面向对象编程语言,我们仍然可以使用Swift实现一个经典的命令模式。实现命令模式的目的只是和之后使用高阶函数的方案对比:

从Swift函数式编程到设计模式(-)_第1张图片
以上例程中,灯(Light)是命令(Command)的操作对象(Receiver)。我们定义了命令的协议,同时我们实现两个具体的命令操作:FlipUpCommand和FlipDownCommand。它们分别使灯亮,和使灯灭。
从Swift函数式编程到设计模式(-)_第2张图片
上面这段代码显示了如何使用命令模式。

结果如下:

从Swift函数式编程到设计模式(-)_第3张图片

在函数式编程中,由于存在高阶函数。我们可以直接将一个函数作为参数传给另外一个函数。所以,使用类包裹函数在对象间传递这件事情就显得多余了。以下代码显示如何使用高阶函数达到命令模式相同的效果:

从Swift函数式编程到设计模式(-)_第4张图片

结果如下:

从Swift函数式编程到设计模式(-)_第5张图片

使用高阶函数的版本中,负责集中调度命令的LightSwitchHF类有一个接受命令的函数addCommand。由于Swift支持高阶函数,这个函数无需接受一个携带命令函数的Command对象,而是直接接受表示命令的函数。这样更为直接自然。所以,命令模式在Swift这样拥有高阶函数的编程语言中,就显得多余了。

为了方便阅读,本章3节分别写了一个playground

源码地址:GitHub - a130785/SwiftFunctionalProgramming: Swift函数式编程

参考文档:

The Swift Programming Language (Swift 2.2): About Swift

IBM developerWorks

Java函数式编程Github源码

你可能感兴趣的:(从Swift函数式编程到设计模式(-))