软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式[1][2],是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来

Andrew Koenig在1995年造了anti-pattern这个词[3],灵感来自于GoF的《设计模式》一书。而这本书则在软件领域引入了“设计模式”(design pattern)的概念[4]。三年后antipattern因《AntiPatterns》这本书而获得普及,而它的使用也从软件设计领域扩展到了日常的社会互动中。按《AntiPatterns》作者的说法,可以用至少两个关键因素来把反面模式和不良习惯、错误的实践或糟糕的想法区分开来:

  • 行动、过程和结构中的一些重复出现的乍一看是有益的,但最终得不偿失的模式
  • 在实践中证明且可重复的清晰记录的重构方案

很多反面模式只相当于是错误、咆哮、不可解的问题、或是可能可以避免的糟糕的实践,它们的名字通常都是一些用反话构成的词语。有些时候陷阱(pitfalls)或黑色模式(dark patterns)这些不正式的说法会被用来指代各类反复出现的糟糕的解决方法。因此,一些有争议的候选的反面模式不会被正式承认。

这个概念很容易推广到工程学以及工程以外需要人们付出努力去争取的领域。尽管在工程学以外很少用到这个术语,但其概念是通用的。via:http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F

以下来自head first dp

反模式告诉你如何采用一个不好的解决方案解决一个问题。

 反模式看起来总像是一个好的解决方案,但是当他真正被采用后,就会带来麻烦

让我们来看看一个反模式的元素:

 反模式告诉我们为什么不好的解决方案会有吸引力.

 必须面对的是,如果不好的解决方案没有任何吸引力,那么根本不会有人想要使用它。反模式最重要的工作之一,在于警告你不要陷入某种致命的诱惑。

反模式告诉你为何这个解决方案从长远看会造成不好的影响。

为了了解为什么这是一个反模式,你必须了解他在将来如何造成负面影响。反模式会告诉你使用这个解决方案,在将来会为你带来怎样的麻烦。

  反模式建议你改用其他的模式以提共更好的解决方案。

反模式除了告诉你什么解决方案不好之外,也会为你指出正确的方向,向你建议一些会引向好的解决方案的可能性,这样反模式才真正有帮助。

设计模式之反(向)模式_设计模式

 下面是一个反向模式 黄金大锤(榔头)Golden hammer的例子:

设计模式之反(向)模式_设计模式_02

 

反模式网站:http://www.antipatterns.com/