设计模式的重要性是什么?

3

我正在学习C++,除了编程设计模式在实际大型项目中必不可少这一事实外,我对这方面的知识了解不多。希望我的理解在某种程度上是正确的。

这是否适用于所有面向对象的语言,还是我需要专门研究C++设计模式。

此外,它如何帮助您。作为C++程序员,这真的很重要吗。

请提供建议。


这里的问题究竟是什么?“设计模式”可以非常具体或通用。通用的设计模式与语言/平台无关,但更具体的设计模式可能需要每种语言不同的定义。从一种语言迁移到另一种语言可能会导致重大重写。 - beatgammit
6个回答

5

设计模式经常被误解。它们实际上是为有经验的用户提供一种描述常见情况的简便方式。在学习C++时,您不需要过于担心它们。


是的,看起来我现在不需要担心设计模式。 - munish
2
设计模式也是学习如何做以前从未做过的事情的好方法。(但我同意学习设计模式和学习C++是两件不同的事情。) - James Kanze
感谢James的见解,所以我点了+1,并且我也喜欢你的建议:“对于初学者,我建议使用策略模式和模板方法模式”。 - munish
@Neil Butterworth 这取决于你的出发点。对于设计问题,我学习新解决方案没有任何问题,对于较简单的模式,如果模式被很好地解释(就像在GoF书中一样),初学者也可能理解它。然而,许多模式的一页描述可能会让比我经验不足的人感到有些困惑。 - James Kanze

2
你会听到关于设计模式的不同意见,这在整个编程社区中很常见。
在我看来,设计模式所封装的抽象概念确实非常有用(如工厂模式、单例模式、委托模式等)。我经常使用设计模式,但有时候我会对阅读模式描述所获得的深度或洞察力感到困惑。这也符合为任何类型的事物专门设计的设计模式的大量出现。
当设计模式适用时,它们是一种非常好的沟通手段,肯定会指导你通过设计或定义应用程序的架构过程。它们既适用于小型项目,也适用于大型项目,并且可以应用于不同的粒度级别。
模式是一种通用的概念,所有编程语言都支持它们。无论如何,如果你在使用C++,最好选择一本专注于它的书籍,因为你将获得适合该语言特性的设计模式。
在我看来,真正基础的设计模式书籍有: GoF, Design Patterns: Elements of Reusable Object-Oriented Software VV.AA.,面向模式的软件架构卷1:模式系统
VV.AA.,面向模式的软件架构卷2:并发和网络对象模式

1

大多数设计模式对所有面向对象的语言都是通用的。


如果你想开发一个带有图形用户界面(GUI)的软件,可以开始学习MVC(模型-视图-控制器)架构。 - jlink
1
在尝试编写GUI之前,他肯定需要了解MVC,但对于初学者来说可能有点复杂,因为实现它通常涉及其他模式(例如Observer)。 - James Kanze
@James 我写了无数个GUI程序,没有一丝MVC的痕迹。 - user2100815
@Neil Butterworth 这取决于GUI模型的内容。如果你正在实时显示计算机生成的数据,MVC是非常有用的。但如果你只是进行数据输入,或者所有的数据都是静态的,那么它就没有那么有用了。 - James Kanze

1

对我来说,设计模式只是缩短程序员之间沟通时间的抽象概念。与其表达程序设计的复杂思想,你可能会找到一个描述程序设计的模式名称。

例如,TPM说“我们应该在这里使用单例”,而你理解为“我们应该在这里使用类的一个实例”。

学习设计模式很有用,但一个人可以在不知道任何模式的情况下编程,却经常使用它们。


1

我认为设计模式是通过经验获得的智慧的集合,特别是解决代码灵活性和可维护性的问题。例如:通过使用外观模式,我们可以在不更改使用外观的代码的情况下更改实现。

我认为可以说所有编程语言都有值得掌握的智慧,并且某种形式的设计模式将会很有用。C/C++/Java/C#等传统语言似乎提供了特别丰富的智慧。C++非常复杂,确实受益于一些关键的设计模式。

有些人认为设计模式是弥补语言缺陷的一种方式,这意味着“更好”的语言可能需要更少的模式。我的感觉是,在所有情况下,我们都可以从经验丰富的人身上学到东西,而模式可以帮助我们将他们的智慧编码。

编辑后添加:Munish提出了一个有趣的观点,最好先进行一些重新发明?通过编写一些没有显式使用模式的真实代码,您可能会开始对自己编写的内容感到不满...当我更改这个时,我需要更改所有那些,有没有更好的编写方式?...这可能会驱使您真正需要模式,从而激发您的学习动力。

如果您有时间以这种方式学习,我认为您可能会受益匪浅。


我认为设计模式是通过经验积累而获得的智慧集合。-->嗯...谢谢,我现在不需要太多了解它,我还没有经验。 - munish
@munish - 因此,你认为每次开始一个编程项目时重新发明解决方案会更好?你每次开车都这么做吗? - KevinDTimm
你说得没错...但我接受了尼尔的观点..即使我不同意..我也无法阻止自己去理解设计模式,直到我发现对于像我这样的新手来说太复杂了。感谢凯文的想法 :) - munish

0

设计模式是针对项目设计阶段中常见问题的解决方案。这些模式提供了我们可以在代码中使用的解决方案,独立于编程语言。例如,有一个单例设计模式,它确保一个类只有一个实例。现在有许多场景可能需要这个模式的解决方案。您可以将这些模式的解决方案用于您的代码中。

它们在软件开发中提供了可重用性。简而言之,设计模式帮助设计人员更快地正确设计

为了更好地理解,您可以参考可重用面向对象软件元素的设计模式


1
这可能会让我的一些批评者感到高兴,但是……Singleton不是一个好的设计模式示例。它只适用于特殊情况,并且并没有真正教授太多东西。我建议初学者从Strategy模式和Template method模式入手;有很多问题可以用其中任意一种解决,而且比较它们也很有趣。 - James Kanze

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