从Swift函数式编程到设计模式(-)
2016-04-25 本文已影响322人
wu大维
Swift支持函数式编程范式。程序员可以使用Swift写出函数式风格的代码。函数式编程是一种以数学函数为程序语言建模的核心的编程范式。在函数式编程中,函数是核心概念,是“头等公民”,函数被赋予了更多职责,拥有更多灵活的使用方式。这一章可以看到使用函数式编程范式,可以消除一些面向对象编程中使用到的设计模式
高阶函数
高阶函数,指可以将其他函数作为参数或者返回结果的函数。由于高阶函数,我们发现GOF设计模式中命令模式(Command)在Swift中消失了。
以上例程中,灯(Light)是命令(Command)的操作对象(Receiver)。我们定义了命令的协议,同时我们实现两个具体的命令操作:FlipUpCommand和FlipDownCommand。它们分别使灯亮,和使灯灭。 上面这段代码显示了如何使用命令模式。命令模式使用对象封装一系列操作(命令),使得操作可以重复使用,也易于在对象间传递。由于Swift仍然主要是一门面向对象编程语言,我们仍然可以使用Swift实现一个经典的命令模式。实现命令模式的目的只是和之后使用高阶函数的方案对比:
结果如下:
在函数式编程中,由于存在高阶函数。我们可以直接将一个函数作为参数传给另外一个函数。所以,使用类包裹函数在对象间传递这件事情就显得多余了。以下代码显示如何使用高阶函数达到命令模式相同的效果:
结果如下:
使用高阶函数的版本中,负责集中调度命令的LightSwitchHF类有一个接受命令的函数addCommand。由于Swift支持高阶函数,这个函数无需接受一个携带命令函数的Command对象,而是直接接受表示命令的函数。这样更为直接自然。所以,命令模式在Swift这样拥有高阶函数的编程语言中,就显得多余了。
为了方便阅读,本章3节分别写了一个playground
源码地址:GitHub - a130785/SwiftFunctionalProgramming: Swift函数式编程
参考文档: