你可以命名多少非GOF模式?

How many non-GOF patterns can you name?

你能说出多少不是GOF模式的设计模式?

你有列出这些名字的网页链接吗?


维基百科页面总是一个很好的开始。链接表中的"in design patterns"列告诉您哪些模式在GOF手册中,哪些没有。


对于它的价值,维基百科上的设计模式有一个设计模式列表,包括关于这些模式是否出现在gof书中的信息。

在我的头脑中,gof排除了与并发性相关的一整套设计模式,包括双重检查锁定、自旋锁定,以及几乎所有关于pi演算的东西。

此外,有些模式似乎很自然地遵循其他编程模式:

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

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

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

  • 以抽象的方式,您可以将关系数据库模式中表之间的关系视为一种设计模式:1对多、多对一、多对多、一对一。除此之外,还有可预测的建模层次数据的方法,这里还有一种相当千篇一律的在SQL中建模带标记的联合的方法。

  • 等。


只有一些其他的OO设计模式。一个是空对象(我忘记了另一个)。这些加上23个GOF是正交和完整的。真的没有了。其他的都只是这25个左右的组合。


布莱恩指出的维基百科名单确实相当全面。我很惊讶地发现了下一个…

  • …现在相当著名的依赖注入模式。
  • …或者是AlexMartelli的Borg模式(这是一个很好的单件模式的替代方案,可以看到这种联系;其思想是共享状态而不是身份)。