设计模式与框架

23

有人能说明一下这两者之间的真正区别吗?


回过头来想,四年后这真的是一个愚蠢的问题。 - sarego
5
这是一个显然有益于人们的问题,所以它并不蠢笨 ;) - Marc
我不认为这是一个愚蠢的问题 :) - Miroslav Trninic
1
这绝对不是一个愚蠢的问题。框架与库是另一个有趣的话题。 - Olivier Liechti
作为 JavaScript 的新手,我应该学习设计模式还是直接使用像 React、Angular、Vue 等框架? - vikramvi
1
@vikramvi 这两者并不是互斥的。你可以在使用React和Vue等框架的同时应用设计模式。 - undefined
12个回答

31

设计模式是一个概念,或者说是解决特定问题的方法。

框架是一段可直接使用的代码,通常以一种便于创建应用程序的方式打包。

讲述两者之间的区别并没有意义,因为它们是完全不同的东西。


1
情不自禁地说:“设计模式是为了克服源语言的缺陷而进行的一种黑科技。框架则是已经准备好供使用的代码…” - user21037
1
一个框架可以包含/使用一个或多个设计模式(以及体系结构模式),但一个设计模式无法包含一个框架。 - user1364368

27

虽然它们是两件非常不同的事情,但可以说它们都解决了软件架构问题。

  • 设计模式通过不同预定义的设计来解决许多与软件架构有关的问题(关于创建、行为、并发等...)。 (设计是架构主题的实现

  • 框架基于Hollywood原则("Don't call us, we call you"),您按照规定实现一些高级需求,然后将其余工作交给框架来调用您的实现。

一个关键区别是范围内聚性

  • 设计模式具有 紧密 的范围

    • 类设计模式(涉及类)
    • 业务设计模式(涉及业务流程)
    • 应用程序设计模式(涉及应用程序)
  • 框架具有 的范围
    例如,.NET是一个框架由以下组成:

    • 一种语言(C#)
    • 一个运行时环境(CLR)
    • 一系列库
      只需开发所需内容,让.NET框架调用您的类即可。

14
|------------------------|
|          (------)      |
|          (ClassA)      |
|          (------)      |
| (-----------)          |
| ((Singleton))          |
| (-----------)          |
|         (---------)    |     
|         ((Factory))    |
|         (---------)    |
|                        |
|                        |
|------------------------|

Legend:
  |---|  Framework
  (---)  Class
  ()     Design Pattern

框架是一组相关的类,用于执行特定任务。这些类可能实现或不实现某个特定的设计模式。


1
使用计数单例作为设计模式,不好哦,但解释得很好,加一分。:-P - user21037
2
这是一个设计模式,无论它是否被过度使用和误用。 :P 感谢您的点赞。 - Vinko Vrsalovic

11

以下是GOF的回答:

因为模式和框架有一些相似之处,人们经常想知道它们如何以及是否不同。它们在三个主要方面不同:

  • 设计模式比框架更抽象。框架可以体现在代码中,但只有模式的示例可以体现在代码中。框架的一个优点是,它们可以用编程语言写下来,不仅可以被研究,而且可以直接执行和重复使用。相反,在本书中的设计模式每次使用时都必须实现。设计模式还解释了设计的意图、权衡和后果。

  • 设计模式比框架更小型化。典型的框架包含几个设计模式,但反过来则永远不成立。

  • 设计模式比框架专业性较弱。框架总是有一个特定的应用领域。例如一个图形编辑器框架可以在工厂仿真中使用,但它不会被误认为是仿真框架。相反,在此目录中的设计模式可以在几乎任何类型的应用程序中使用。虽然比我们更专业化的设计模式当然是可能的(例如,分布式系统或并发编程的设计模式),但即使这些设计模式也不像框架那样指定一个应用程序架构。


8

设计模式是解决问题的一种成熟的设计方法。框架是实际的代码包,用于使应用程序的构建更加容易。请注意,框架可以并且可能会使用设计模式。


6

来自《Java面向对象软件开发》一书,作者是夏平·贾:

尽管设计模式和框架都是用于捕获可重用设计的机制,但它们有很大的区别。一方面,设计模式是可重用设计的示意性描述,不是具体的程序,并且与编程语言无关。另一方面,框架是用特定编程语言编写的可编译程序,通常包含抽象类和接口。设计模式是框架的架构基石。它们有助于使框架具有可扩展性和可重用性。框架通常包含许多协作设计模式的实现。


5

模式支持软件架构和设计的重用 - 模式捕捉到成功解决特定领域应用程序构建问题的静态和动态结构以及协作。

框架支持详细设计和代码的重用 - 框架是一组集成的组件,它们协作提供可重用的架构,适用于相关应用程序的家族。

设计模式和框架共同有助于提高软件质量并减少开发时间。


3
设计模式是针对已知(设计)问题的标准解决方案。例如,工厂模式和抽象工厂模式提供了实现设计以克服常见对象实例化问题的蓝图。
另一方面,框架包含基础设施,您可以使用并扩展其来开发自己的解决方案。例如,2型“Web应用程序框架”将包含用于构建基于Web的应用程序的基础设施。它将包含控制器、一些GUI元素和我们可以扩展以创建我们的模型和业务逻辑的基类。通常,它包含管道代码和交互,我们从其基类继承时会继承这些内容。一些框架的示例包括Struts、JSF、Swing应用程序框架、JUnit测试框架等等。
更进一步的是,还有库,我们直接从我们的代码中使用它们,通常不需要扩展它们的类。Log4J就是一个库的例子。

0

这个问题已经有了几种不同的回答,但我认为缺少一个具体的例子。

设计模式:一组规则的集合,用于解决重复出现的问题。这些规则定义了模式。没有代码可供复制粘贴来实现此目标。开发人员应该理解规则,然后实施它们。

例如:

  • 名称:测试驱动开发(TDD)
  • 问题:确保编写的单元测试覆盖足够的场景,以便您对生产代码充满信心。
  • 规则:它指出您应该先编写测试,然后编写代码以通过这些测试。这样可以确保您不是在编写测试以通过代码,而是在编写代码以通过测试。

设计模式分为三类:

  • 创建型设计模式:
  • 结构型
  • 行为型

我发现 this link 对解释它们很有帮助。


框架:框架与库不同,是支撑系统的基本结构,使开发人员能够以标准化的方式构建和部署软件应用程序。

例如:.Net Core框架是一个工具,包含一组库,使得使用Microsoft技术栈的开发人员能够编写可以在多个不同环境(Windows、Mac OS、Linux)中部署的软件应用程序。


:一个可重复使用的方法/类集合,组成一个包以提供功能。
例如:System.Collections.dll 库使 .Net 开发人员能够使用 Hashtable 等功能。

值得一提的是,有时候它只是一个流行词汇,并且在不同的环境中有所不同,因此查看其他答案也很重要。请点击这里

希望这可以帮助到你。


0

答案非常简单: 框架:系统中的元素(如组件、层、类等)之间必须或应该如何交互。

设计模式:解决高频问题的方案。它可以是将MSSQL源代码转换为Oracle等,有三种类型:分析、设计和实现模式。


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