是否存在确定的设计模式列表?
设计模式的思想从何而来,谁决定了什么是模式,什么不是模式,并给它们起了名字?是否有一个定义它们的官方组织,或者它们是否通过某种社区共识而存在?
解决方案
维基百科有一个很好的清单。 http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
大多数是通过社区共识(社区是已经阅读了设计模式或者代码完整的人的社区:/)
没有明确的清单。模式是发现而不是发明的,因此没有组织可以说"这是一种模式"和"这不是一种模式"。即使有一个,对任何人也没有用。
尽管如此,"著名"模式还是"设计模式"或者GOF书中描述的模式。
大多数人会提到"四人帮"(Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides),他们写了《设计模式:可重用的面向对象软件的元素》一书。确实没有确定的清单,因为肯定会一直发现有用的设计模式。
识别反模式也很有用。
有一本规范的书:Gamma,Helm,Johnson,Vlissides:"可重用的面向对象软件的设计模式元素"开始了这一切。它包含23种模式。
我认为存在一个基本的"设计模式的生命周期"
- 作者在书中写有关设计模式的文章。
- 本书读起来很好,可能是畅销书
- 设计模式进入公众意识,赢得关注。
- 使用设计模式。它运作良好。设计模式获得更多关注
- 设计模式成为灵丹妙药,被过度使用。
- 不同的作者写了"被认为有害的设计模式"
- 设计模式变为反模式
- 不同的作者成名,写满了新的设计模式的书...
没有确定的清单,因此很可能需要某个权限来声明某个模式是一个模式还是仅仅是一个……。
有些模式仅在规范的GOF书集中于Java的语言子集中才有意义(或者是C ++?这本书在我办公室的桌子上),而其中描述的某些模式与Ruby或者Java不太相关。 VB6. 反之亦然。
这是一个很好的模式列表(来自《企业应用程序体系结构的模式》一书):
http://martinfowler.com/eaaCatalog/
简短答案:不可以。
长答案:既然有人设计了某个东西,而且它倾向于被其他人重用,那么就会创建(或者发现)一个新的"设计模式"?
实际上,现有应用程序中的设计模式数量可能很多,但是尚未对它们进行分类。
我将在前面的链接中添加这两个:
http://martinfowler.com/eaaCatalog/
http://c2.com/ppr/
我要说的是,"四人帮"一书中的列表和Fowler的企业架构模式的结合将为我们提供我们所需要知道的99%的知识。
设计模式的想法是克里斯托弗·亚历山大(Christopher Alexander)在提出有关建筑物和城镇中的建筑模式时提出的。类似地,随着工程师在面向对象设计方法学上获得了更多的经验,出现了模式。
没有一个官方协会定义什么是模式,什么不是模式。但是,模式在被普遍接受之前通常具有较长的生命周期。开发社区开始参加诸如PLOP(程序模式语言)之类的活动及其年度会议:2008年会议,
专注于模式作者和爱好者,讨论模式和新模式开发的主题。
不可能有明确的清单。曾经。
如果我们发现一些对我们来说具有可以表达的模式的问题的解决方案,那么我们已经发现了一种设计模式。我们可以随时继续执行此操作。
每个聪明的新解决方案都可能是具有共同模式的类似解决方案的起源。模式是我们用来总结和捕获问题的出色解决方案的工具。
人脑几乎可以在任何事物中找到模式。这是我们无需考虑的事情。