哪些设计模式可以提高性能?

5

当谈到设计模式时,我们总是听到它们是共同的架构问题的文档化解决方案。

我很好奇哪些设计模式是改善应用程序性能的好解决方案。


1
@user619133,你所应用的设计模式是针对你试图解决的问题而特定的。这是一个误解,认为一个设计模式可以适用于所有解决方案。 - Devendra D. Chavan
1
生命的终极答案是什么? - user541686
6
哪种颜色拥有最多的RAM? - Cody Gray
有些滑稽的是,这个问题通过“被讨论的设计模式”与官方的Overflow博客相连。我认为Stack Overflow旨在作为知识库提供问答服务,而不是讨论论坛。不确定这个问题是否经得起时间的考验,今天是否仍然符合“主题”的要求。 - knittl
5个回答

11

更严肃的一面,设计模式很可能会降低性能。从我的经验来看,使用设计模式可以编写更加清晰、易于维护的代码。如果需要优化任何东西,你可能需要重新考虑代码中的设计模式。

通常,代码的性能取决于相对较小的部分(如数据结构、函数甚至单个循环),因此这些方面不涉及到设计模式。将 C 中简单的函数转换为超级优化的汇编版本可能不会改变整个类的行为方式。


从某种程度上说,你是正确的,我相信设计模式最重要的用途在于使代码易于扩展、可维护和以高效的方式管理内存。 - Siva

11

享元模式可以降低内存消耗。

代理模式可用于速度优化。

桥接模式可以在运行时更改抽象的实现,始终选择最高效的实现方式。


这些模式非常有用。在内存仍然是问题的小型设备中,管理内存可以提高性能。我相信单例模式也可以有效地改善内存管理。 - Siva
2
Singleton解决了同时只维护一个实例的问题,但它并不能解决任何效率问题。此外,它是最棘手的模式之一,除非没有其他解决方案(实际上总有其他解决方案),否则应该避免使用。 - dzendras
是的,你说得对。看到你的评论后,我进行了一些谷歌搜索,并找到了这些链接:https://dev59.com/23M_5IYBdhLWcg3wZSTX,http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/,http://misko.hevery.com/2008/08/25/root-cause-of-singletons/。简而言之,单例模式对内存非常不好,因为它永远不会被释放。它可能导致代码不清晰,不利于测试。唯一可以使用它的好地方就是日志记录。 - Siva
对于享元模式,这个链接提供了很好的解释,说明为什么它对性能有好处。http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-designpatterns.html?page=5 "分配大量(通常是小)对象可能会损害您的Java应用程序的性能,尽管现代JVM已经大大减少了这种过度的惩罚。如果您发现您的应用程序正在实例化大量特定类型的对象,则可以考虑使用享元模式来共享其中有限数量的对象" - Siva

2

对象池模式

对象池模式是一种软件创建性设计模式,它使用一组已初始化的对象保持可用 - 一个“池”,而不是根据需求分配和销毁它们。

对象池主要用于提高性能:在某些情况下,对象池可以显著提高性能。


1

没有什么比这更好了。设计模式用于使您的开发维护更加容易。

大多数情况下,设计模式用于

design pattern is a general reusable solution to a commonly occurring problem in software design

1

可能是“不要做愚蠢的事情”模式。如果严格遵循,你会发现它胜过:

  • 工厂
  • 单例
  • MVC
  • 面向方面编程
  • 极限编程和极限程序员(无情地)
  • DotNetNuke(两次)
  • Drupal(一次)

毫无疑问


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