Haskell demonstration of equivalents to OOP Design Patterns
本问题已经有最佳答案,请猛点这里访问。
有人声称OOP设计模式在函数语言中是不相关的。是否有代码演示如何在Haskell中实现每个模式?特别是,完整的演示还必须演示如何表示对象、OO多态性等。
我认为"不相关"的一部分原因更多的是纯面向对象概念与纯函数编程不兼容。
在某些方面,它们都是为解决同一个问题而设计的概念——代码管理、程序员和以某种方式保持"状态"的组织。
OOP通过尝试将每种状态隔离到一个单独的对象中,然后让智能对象彼此交谈(通过方法、接口等)来解决这个问题。
纯函数语言通过将问题分解为非常小的函数来解决这个问题,并且使数据相当哑。一个函数不能访问、编辑或更改任何没有特别指定为参数的内容,它对这些内容的处理只能在返回的内容中看到。
以单例模式为例。在OOP中,为了解决全局变量(例如数据库连接)的问题,singleton模式表示将所有数据库连接信息存储在一个对象中,然后只允许对其进行一次初始化,然后每当初始化它时,整个代码库中都会出现相同的对象并使用相同的变量。
在haskell/函数式编程中,程序的整体结构会有所不同。而是隔离数据库连接函数,使其只在代码的一部分中发生。
您可以在OOP类型的语言中应用相同的东西,但是它更尴尬,而且语言设计不鼓励这样做。
FP和OOP试图用不同的方法解决相同的问题。GOF只是不适用,因为它们是OOP模式。阅读诸如"函数式编程的技巧"或"学好哈斯克尔",以便了解问题在功能上是如何解决的,这样会更好地为您服务。
我个人认为这两种方法都是有用的,并且是Haskell类型类和完全多态函数的忠实粉丝……Dry的简单性和功能简直令人惊叹。也就是说,scala非常擅长将这两种方法结合到一种语言中,这样您就可以使用任意一种方法,这取决于哪种方法更适合这个问题。