我只听说过“设计模式”一词用于面向对象的代码,而GoF模式仅包括OOP设计模式,但是设计模式是解决常见编程问题的绝佳解决方案,对吗?那里没有什么说他们必须限于OOP,是吗?
我想看到一些面向对象编程领域之外的设计模式示例。你有什么?甚至存在吗(没有一本书籍,像GoF书籍一样,必须一定要写出来,才应该使用;就足够了)?
它们可能特定于某些编程语言,但是一般的(范例级别)模式是首选的,而其他模式则不是面向对象的。
我只听说过“设计模式”一词用于面向对象的代码,而GoF模式仅包括OOP设计模式,但是设计模式是解决常见编程问题的绝佳解决方案,对吗?那里没有什么说他们必须限于OOP,是吗?
我想看到一些面向对象编程领域之外的设计模式示例。你有什么?甚至存在吗(没有一本书籍,像GoF书籍一样,必须一定要写出来,才应该使用;就足够了)?
它们可能特定于某些编程语言,但是一般的(范例级别)模式是首选的,而其他模式则不是面向对象的。
Answers:
实际上,这是一个悖论-最受欢迎的Non-OO模式之一是...“ Class”。
因为OO是在非OO语言中发明的,所以开发人员不得不对其进行仿真(并且他们现在甚至还在做)-因此,这种模式就诞生了。LISP和C就是这样的例子。
但是请听取我的建议:不要犯常见的错误-不要仅仅因为它很酷就使用模式,您需要认真的理由来证明使用模式的合理性(至少是OO模式)。
以命令模式为例-尽管它很好,并且可以将调用者与接收者分离,但是除非您实际需要,否则不应该使用它-因为操作应使用动词表示-这意味着方法。并在所有地方使用命令,最终会得到一堆完全去中心化的OO lambdas->对于许多策略来说同样如此。
“设计模式”实际上是“变通方法”的委婉说法。发明设计模式是为了解决OO语言的缺点和缺陷。例如,采用迭代器模式,该模式最终导致Java集合的引入。Groovy通过将它们转换为语言功能而摆脱了许多其他模式:您不再需要装饰器模式,因为您可以向Groovy中的现有类添加方法。
这意味着您可以在任何地方找到设计模式。实际上,每个“最佳实践”都可以视为设计模式的简单形式。
除了命名非oo设计模式之外,我还想给您提供一些具有许多设计模式的书籍示例(其中某些模式仍然是面向对象的):
希望这可以帮助
在函数式编程(尤其是Haskell)中,有很多模式和习惯用法不能很好地映射到OOP。幻像类型是一个众所周知的示例,您可以在Idioms的haskell Wiki页面上找到更多内容。
非OOP模式的一个很好的例子是我绝对喜欢的模式目录:James O. Coplien撰写的敏捷软件开发的组织模式。本书与软件模式无关,与人员有关,是创建成功团队的目录。每个经理都应该读这本书!