我真的很困惑GOF和GRASP模式之间的区别? 尽管两者都有助于改进面向对象的实践。
简短回答:
GoF被提到是关于设计模式。而GRASP是设计原则。设计原则比设计模式更抽象。
长回答:
软件工程的主要目的是开发合适的软件。SDLC在最高级别上呈现了软件工程的步骤。软件设计是SDLC的其中一步。而面向对象软件设计是一种流行的软件设计方法。
为了进行面向对象软件设计,有许多种不同名称的资源(书籍、教程和论文)例如:指南、原则、启发式、模式、样式等等。
这些名称之间的差异是它们的抽象度。最高级别是主要原则,其他级别是帮助达到这些主要原则的细节。
在最高级别上,教程介绍主要原则。(基于Object-Oriented Analysis and Design with Applications, Grady Booch, et al. 1991)
面向对象的主要原则
所有后续的原则和模式都与这些主要原则相关,并且试图支持和改进它们。
在资源的第二级别中,有原则并试图支持和改进面向对象的主要原则。
这个级别的资源被称为设计模式。GoF(四人组)是第一本关于设计模式的书。有23种设计模式来支持面向对象设计的主要原则和其他原则。
在GoF之后,许多书籍写了关于如何在特定编程语言和特定框架中使用设计模式(例如:J2EE设计模式,JQuery设计模式等)。
设计模式更加详细,与编程语言联系更加紧密。然而,主要原则(顶层)和原则(第二层)则更加抽象。
在这个级别中,资源被称为:启发式。
这一层次的资源比其他组更加详细和具体。
最好的资源是Arthur J. Riel于1996年出版的《面向对象设计启发式》(72个启发式)。
在最后一层,有指南。
所有书籍中的“做”、“不要做”、“避免”等指南都可以归为此类。