所有功能编程设计模式都在哪里?[关闭]


75

OO编程文献中充满了设计模式。大多数有关面向对象程序设计的书都专门用一两章来设计诸如工厂和装饰器之类的模式。那么功能语言中的等效模式是什么?为什么还没有人写过有关它们的书?关于功能语言,有什么特别的东西可以消除对设计模式的需求?


6
肯定有功能性的设计模式-以备忘录或monad为例-我也想知道是否有人将它们收集在一个地方...
FinnNk 2011年

2
FinnNk单子比设计图案^ _ ^多种类型的类
替代

对于haskell,Gabriel Gonzalez拥有一些博客文章,例如haskellforall.com/2012/08/the-category-design-pattern.html
bennofs 2014年


1
地图归约是其中之一。我很失望,没有图案的好清单
斯里达尔Sarnobat

Answers:


47

OO和功能编程是两种截然不同的编程范例,而设计模式(DP)是OO设计和编程的重要组成部分。DP在函数式编程中不起作用。

甚至可以说,在函数式编程中不需要使用DP - DP可以解决任何问题。


41
我不确定我是否会同意设计模式不适用于FP。FP仍然存在一些常见的问题,这些问题可以通过特定的常规方法来解决。与OO中解决的问题不同,但仍然存在问题。我认为,与OO相比,它可能受到的关注要少得多,因为FP在当前的商业世界中并不那么普遍。
d11wtq

22
断言功能编程中不存在设计模式是错误的信息。最简单的反例是monad。您无需在函数式编程中使用monad,但这是人们遵循的非常常见的模式,可促进纯函数式编程的应用。本质上就是设计模式的定义。
voidvector 2014年

3
设计模式适用于所有设计活动,无论是编程还是房屋设计。实际上,模式语言的真正概念来自体系结构:en.wikipedia.org/wiki/A_Pattern_Language
BobDalgleish 2014年

2
嗯 可以观察到的溪流,铁路验证以及地狱,几乎每个monad都是一种设计模式,对吗?
切特

2
@voidvector Monad不仅仅是一个设计模式。在FP中,单子用作类型系统之间的函子,该概念本身来自于数学的一个分支类别理论。它们通常用于描述代数结构之间的一种特殊类型的关系。准确地说,函数式编程是一种设计方法,可促进在编程中使用数学。
John Cramerus


13

一个简单的事实是,许多OO模式将被视为功能语言中的惯用语(尤其是原始的GoF模式)。例如,在具有序列运算符的Lisp或ML中,不需要迭代器模式(现在已内置到C#这样的语言中)。

我们在OO系统中使用的许多模式都可以帮助我们消除“非本质”问题,因此我们可以专注于编码对象。换句话说,这些模式是应用程序不感兴趣部分的解决方案。我们应该利用模式来解决以前已经解决的常见需求(例如,企业应用程序体系结构的Fowlers模式中的模式用于处理数据库传输之类的内容,或者xUnit模式中的模式用于增强单元测试的能力),以便我们可以专注于增加业务价值为应用程序。

我敢肯定,除了GoF模式的细节之外,还有一些设计模式也将适用于函数式编程。事实是,OO是主导范式。编写针对功能开发人员的模式书...坦率地说,发行商不会开绿灯。这就是归结为。对于功能性模式,没有足够的市场来提供大量有关该主题的书籍。


9

斯图尔特·塞拉(Stuart Sierra)在这个话题上做了很好的演讲(〜45分钟):

http://www.infoq.com/presentations/Clojure-Design-Patterns

不一定具有约束力和权威性,但是我根据自己使用FP进行数据分析的经验认识到他的许多示例。

用Clojure编写的示例,但可能适用于任何FP语言。他为所涵盖的模式提供的名称是:

  • 状态/事件
  • 后果
  • 累加器
  • 减少/合并
  • 递归扩展
  • 管道
  • 包装纸
  • 代币
  • 观察者
  • 战略

6

如果您真的对学习设计模式感兴趣,那么Haskell就是您的最佳选择。如果您花时间以艰难的方式学习语言,那么您就会陷入困境,并且对大多数基本模式都感到满意-它们已经融入了语言。

不要跳过单子。那里有很多冗长的解释,需要花一些时间才能使想法沉浸其中,但是如果您不停地插话,最终它就会冒出来,您会惊讶于可以设计出多少种设计模式建立在这一抽象/接口之上。

一旦掌握了Haskell,就会有足够的FP武器库可供使用,以免发生危险。重点是,坚持下去直到得到它。没有捷径。


-3

就FP的设计方法论而言,就是要设计您的类型以准确反映问题空间,并且实现应自动遵循,FP相当于一本有关设计模式的书,就像Chris Okasaki的Purely Functional Data Structures


1
Okasaki的书相当于许多数据结构和算法书中的数据结构部分,通常只考虑可变数据结构。
AProgrammer 2011年

1
我认为将数据结构等同于设计模式不符合要求。这不像OO程序员只是在适当的类定义弹出之前挥舞手臂。
2011年

是的,冈崎的书比设计模式要低。
FinnNk 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.