Swift函数式编程范式下的模板模式实践

myreed 9年前

来自: http://www.jianshu.com/p/c4f185e4cd72

设计模式无疑是在面向对象思想下的产物。

但是在不同的范式下,模式有可能呈现为截然不同的外在形象。因为函数式世界用来搭建程序的材料不一样了,所以解决问题的手法也不一样了。 ——《Functional Thinking》

这篇讲讲模板模式(Template Method Pattern)在函数式编程里的实现。

首先简单的介绍下模板模式:

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。

模板模式的使用场景:

1、多个类区别在于主流程中的某个细节

2、客户可以自已实现模版里的抽象方法

3、对客户隐藏具体的实现流程(方法的组合的顺序)

</div>

假设Customer对象有个处理订单的方法。那么传统的模板模式实现大概是这样:

class Customer {   /  检查余额   */   func checkCredit(){   assertionFailure("should be override")   }   /      检查库存       /   func checkInventory(){   assertionFailure("should be override")   }   /*      送货       /   func ship(){   assertionFailure("should be override")   }   /*      处理订单       */      func process(){          checkCredit()          checkInventory()          ship()      }  }
</div>