GOF和GRASP设计模式有什么区别?

15

我真的很困惑GOF和GRASP模式之间的区别? 尽管两者都有助于改进面向对象的实践。

2个回答

34

简短回答:
GoF被提到是关于设计模式。而GRASP设计原则。设计原则比设计模式更抽象。

长回答:
软件工程的主要目的是开发合适的软件。SDLC在最高级别上呈现了软件工程的步骤。软件设计是SDLC的其中一步。而面向对象软件设计是一种流行的软件设计方法。

为了进行面向对象软件设计,有许多种不同名称的资源(书籍、教程和论文)例如:指南、原则、启发式、模式、样式等等。

这些名称之间的差异是它们的抽象度。最高级别是主要原则,其他级别是帮助达到这些主要原则的细节。

最高级别

在最高级别上,教程介绍主要原则。(基于Object-Oriented Analysis and Design with Applications, Grady Booch, et al. 1991)
面向对象的主要原则

  • 抽象
  • 封装(信息隐藏)
  • 层次结构(继承、聚合)
  • 模块化(高内聚和松耦合)

所有后续的原则和模式都与这些主要原则相关,并且试图支持和改进它们。

第二级别

在资源的第二级别中,有原则并试图支持和改进面向对象的主要原则。

  1. SOLID原则
  2. GRASP原则
  3. 迪米特法则-LoD
  4. 以及其他类似LoD的单一命名原则

第三层

这个级别的资源被称为设计模式GoF(四人组)是第一本关于设计模式的书。有23种设计模式来支持面向对象设计的主要原则和其他原则。

在GoF之后,许多书籍写了关于如何在特定编程语言和特定框架中使用设计模式(例如:J2EE设计模式,JQuery设计模式等)。

设计模式更加详细,与编程语言联系更加紧密。然而,主要原则(顶层)和原则(第二层)则更加抽象。

第四层

在这个级别中,资源被称为:启发式

这一层次的资源比其他组更加详细和具体。

最好的资源是Arthur J. Riel于1996年出版的《面向对象设计启发式》(72个启发式)。

第五层

在最后一层,有指南

所有书籍中的“做”、“不要做”、“避免”等指南都可以归为此类。


1
太棒了,你的回复清晰地描述了情况及其所在位置。谢谢。 - Manish Kumar
在顶层缺少多态性! - Kamran
1
多态性不是面向对象设计原则,而是面向对象编程原则。请参考Grady Booch的《面向对象分析与设计》一书。 - Gholamali Irani

13

GOF 是指设计模式,即针对重复问题的已经被证实的设计解决方案。GRASP 是原则,不限于任何特定的问题领域,因此在任何情况下都适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接