设计模式 (计算机)
在软件工程中,软件设计模式是一种通用的、可重复使用的解决方案,用于解决软件设计中某个特定背景下经常出现的问题。它不是一个可以直接转化为源代码或机器代码的成品设计。相反,它是对如何解决一个问题的描述或模板,可以在许多不同的情况下使用。设计模式是正式的最佳实践,程序员在设计一个应用程序或系统时可以用它来解决常见的问题。
面向对象的设计模式通常显示类或对象之间的关系和相互作用,而不指定最终涉及的应用类或对象。意味着可改变状态的模式可能不适合于函数式编程语言。有些模式在有内置支持解决它们所要解决的问题的语言中会变得没有必要,而且面向对象的模式不一定适合非面向对象的语言。
设计模式可以被看作是介于编程范式和具体算法之间的一种计算机编程的结构化方法。
历史模式早在1977年就被Christopher Alexander作为一个架构概念提出(参见The Pattern of Streets, JOURNAL OF THE AIP, September, 1977, Vol.32, No.3, pp.278)。1987年,Kent Beck和Ward Cunningham开始尝试将模式应用于编程–特别是模式语言–并在当年的OOPSLA会议上展示了他们的成果。在接下来的几年里,Beck、Cunningham和其他人对这项工作进行了跟进。
在《设计模式》一书出版后,设计模式在计算机科学中得到了普及。可重用面向对象软件的要素》一书于1994年由所谓的四人帮(Gamma et al.)出版,该书经常被缩写为GoF。同年,xxx届编程模式语言会议召开,次年,波特兰模式库成立,用于记录设计模式。该术语的范围仍然是一个有争议的问题。设计模式流派中的著名书籍包括。
实践
设计模式可以通过提供经过测试、验证的开发范式来加速开发过程。有效的软件设计需要考虑到那些在实施过程中才会出现的问题。新写的代码往往会有一些隐藏的细微问题,需要时间才能发现,这些问题有时会在以后的工作中造成重大问题。重用设计模式有助于防止这种微妙的问题,而且对于熟悉模式的编码员和架构师来说,它还可以提高代码的可读性。

为了实现灵活性,设计模式通常会引入额外的间接层次,这在某些情况下可能会使所产生的设计复杂化,并损害应用程序的性能。
根据定义,一个模式必须被重新编入每个使用它的应用程序中。由于一些作者认为这是对组件所提供的软件重用的一种倒退,研究人员已经努力将模式变成组件。Meyer和Arnout能够为他们所尝试的三分之二的模式提供全部或部分的组件化。
软件设计技术很难应用于更广泛的问题。设计模式提供了一般的解决方案,以一种不需要与特定问题相联系的格式记录下来。