设计模式概述
在20世纪70年代,Christopher Alexander 提出了城市建筑的模式,他认为:模式是描述一个不断发生的问题和该问题的解决方案。随后,Erich Gamma,Richard Helm,Ralph Johnson 和John Vlissides 写了一本著名的参考书《设计模式:可复用面向对象软件的基础》,后人也因为这本书称四人为四人组,将这本书中描述的模式称为GoF(Gang of Four)设计模式。在这本书中,四人组将设计模式定义为:对被用来在特定场景下解决一般设计问题的类和互相通信的对象的描述。通俗的说,可以把设计模式理解为对某一类问题的通用解决方案。
设计模式的概念
首先,设计模式解决的是一类问题,例如工厂模式就是为了解决类的创建的问题,而适配器模式则是为了解决类接口不匹配的问题。如果把解决A问题的设计模式用于B问题,结果肯定张冠李戴。所以在描述设计模式前,首先要描述这个设计模式究竟要研究什么样的问题。
其次,设计模式是一种通用的解决方案,而不是具体的。也不是唯一的。在GoF的书中对设计的描述着重于思想的描述,虽然也给出了C++的实现方法。但同样也可以用Java甚至面向对象的语言实现。具体应用时可以根据实际情况进行相应的变化。
设计模式的组成
一般的,在描述一个设计模式时,至少需要包含四个方面:模式名(Pattern name),问题(problem),解决方案(solution),效果(consequence)。这四个方面是设计模式的四要素。名不正言不顺,每种设计模式都有自己的名字,也就是模式名;设计模式都有其应用的场合,即该设计模式意图解决的问题,超出了这个问题就不应该再应用这种模式,所以问题是设计模式的第二要素;设计模式的目的既是解决问题,所以在描述设计模式时当然要有解决问题的方法描述,这就是设计模式的另一要素–解决方案;对于每一种设计模式而言,还有其更具体的效果描述,所以设计模式的最后一个要素就是效果。