你能列举出多少个非GOF设计模式?

8

除了GOF模式,你能说出多少其他的设计模式?

你有没有任何列出这些名称的网页链接?


1
搜索“模式存储库”,您将找到许多链接。 - TrueWill
MVC,例如。这是一种高级模式,不是由四人帮创建的。 https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm - user9926883
4个回答

11

查阅维基百科页面是一个很好的开始。链接表中的"In Design Patterns"列告诉你哪些模式在GOF书中,哪些不在。


6

就我所知,维基百科上的设计模式列出了一些设计模式,其中包括这些模式是否出现在GOF书中。

从我的经验来看,GOF排除了与并发相关的整个设计模式类别,包括双重检查锁定、自旋锁定以及几乎所有关于π演算的内容。

此外,有些模式似乎是从其他编程范例自然而然地产生的:

  • 函数式编程中有很多模式没有出现在GOF书中。一个常用的设计模式涉及使用累加器变量将非尾递归函数转换为尾递归函数。此外,单子的概念或其用途对原始开发人员来说完全陌生。不可变对象在GOF书中完全不存在。

  • Lisp的宏系统可能被认为是一种设计模式,或者表明了一种设计模式。

  • 我从未使用过基于堆栈的编程语言,但我敢打赌Forth程序员有很多技巧可以使他们的算法映射到堆栈。

  • 从抽象的角度来看,你可以将关系型数据库模式中表之间的关系视为一种设计模式:1对多、多对1、多对多、1对1。更重要的是,有可预测的建模分层数据的方法,这里有一个相当标准的在SQL中建模标记联合的方法

  • 等等。


3

只有很少几个其他的oo 设计模式,其中一个是null object(我忘了另一个)。这些加上23个gof模式可以说是正交且完备的。实际上没有更多其他的模式,其他的大多数情况下只是这25个模式的组合。


2
Brian提供的维基百科列表确实相当全面。我很惊讶地发现既没有依赖注入模式这个如今已经相当著名的模式,也没有Alex Martelli的Borg模式(一个不错的单例替代方案,请参见this link;其思想是共享状态而非身份)。

1
嗯,你知道,维基百科是可以编辑的... - Brian Willis
2
Borg是相当针对Python的。最强大的设计模式在各种编程语言中都是通用的。 - PaulMcG
@Brian,说的很对!事实上,我偶尔会在WP上做出贡献,也许我会就这个模式做出贡献(我只需要彻底阅读当前列表,因为很多模式都以不同的名称和/或微妙的差异出现... - mjv
@Paul McGuire: 是的,Borg模式更容易在Python中实现,虽然它也可以在其他地方实现(我用C#实现过)。不过,GoF非常清楚DP实现的语言环境的重要性和/确实需要与否。引用:“编程语言的选择很重要,因为它影响一个人的观点”。Borg是一个有趣的例子,容易实现,但在Python中很少使用它或单例模式,而在Java中,模块级方法不存在时则不同。 - mjv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接