四人帮 设计模式 使用文字处理程序作为至少一些模式的示例,特别是 Composite 和 Flyweight。

除了使用 C 或 C++ 之外,您真的可以使用这些模式以及它们所需的面向对象开销来编写高性能的全功能文字处理器吗?

我知道 Eclipse 是用 Java 编写的,但我没有经常使用它,所以我不知道它是否像 Visual Studio 这样的东西那么快或那么精致,它有一个基于 C++ 的文本编辑系统。


我仅使用 C++ 和 Java 作为示例。这个问题更多地与拥有大量内存对象的开销有关,就像在文字处理器甚至游戏等应用程序中一样。

设计模式以牺牲简约为代价来促进抽象,尽管它们通常会指出何时可能会受到某种性能影响。文字处理器,尤其是游戏,可以通过尽可能接近金属来获得最大的好处。

我只是想知道是否有人知道一种不是用 C++ 编写的快速的面向对象的文字处理器或文本编辑器,以及他们是否会使用模式构建一个,或者他们会放弃很多事物的抽象吗?

有帮助吗?

解决方案

Flyweight 实际上只是一种在存在数千个具有内在共享状态的对象的情况下节省资源的方法,因此它在比 C/C++ 更高级的语言中可能很有用。也许 GoF 在文档中使用字形的示例并不是说明这种模式的最佳选择。

我认为除了这些基本模式之外,构建高性能文字处理器还有很多东西 - 不确定 GoF 中是否有任何东西排除了能够成功做到这一点。

一般来说,Visual Studio (VS) 更先进,并且性能明显优于 Eclipse——至少,我见过的 VS 版本是这样。Eclipse 是最令人印象深刻的 Java 应用程序之一,它在具有大量 RAM 的最新机器上运行得很好。

其他提示

出色地, 蝇量级 在文字处理程序中使用是一种荒谬的模式。IIRC,他们将每个角色都作为一个对象引用[注意:这是为每个 字形, ,这仍然很疯狂,因为你的操作系统会很乐意为你绘制它]。由于指针比字符宽并且所有处理都与间接相关,因此您会疯狂地在文字处理器中以这种方式使用该特定模式。

如果您对文字处理器的设计感兴趣,我发现一篇文章没有讨论模式,但确实介绍了一些 字处理器设计的数据结构和设计注意事项.

试着记住,设计模式是为了让你的生活更轻松,而不是为了让你变得纯粹。使用模式必须有一个理由,它必须提供一些好处。

一般来说,GoF 和模式的要点是讨论如何“正确”地做事,而不一定是“正确”地做适合情况的事情。如果性能是一个问题,并且您发现没有命名模式能够提供足够的性能,那么也许您可以证明采用自己的方式是合理的。但是,对模式的充分了解可以为您提供“合理的默认值”,并且可能意味着您只需牺牲清晰度/SoC/等来提供足够的性能即可。

感觉自己“偏离”了规范,这会鼓励您 a) 三思而后行,b) 很好地注释非惯用代码。

模式是至关重要的知识,但没有什么是福音,你必须始终运用判断力。

话虽如此,我想不出有什么理由不能使用模式和现代 JDK 编写一个像样的文本编辑器

您必须记住的一件事是 GoF 书是在 90 年代初写的,当时流行的操作系统没有广泛的图形库。那时甚至 Windows 还不是操作系统。

IIRC GoF 于 1994 年发布。即使在 1994 年,Windows 95 Beta 就已经可用(并在我的 486DX33 上运行),而 Windows 3.x 大约从 1990 年就已经出现了。

Eclipse + netbeans + IntelliJ 几乎都是用 java 或 某物 运行在 JVM(不是 C++)上。在至少其中 2 个 IDE 中,我花了一些时间研究编辑器代码,所以我可以向您保证它全部是 java(而且它也不容易)。

VS 2005 是我最后一次使用 Visual Studio,即使在那时,我也认为 Eclipse 的响应速度要快得多(intelliJ 的响应速度加倍,因此有时间预热和索引)。

不确定这有什么关系,但这是我的经验。但令我惊讶的是,Visual Studio 今天仍然是用 C++ 编写的 - 我认为使用 C# 符合 Microsoft 的利益 - 如果不出意外的话,它确实会大幅提升其性能,没有什么比吃自己的狗粮更好的了!

是的,当前的机器足够快并且有足够的内存,这是可能的。如果你看一下 Squeak,你会看到一个用 Smalltalk 编写的 Smalltalk IDE,它比 Java 慢得多,但仍然足够快。另一方面,高清视频编辑目前需要一些较低级别的支持。

这个问题实际上似乎是关于Java vs.C++ 性能,与其说是面向对象,不如说是在具有垃圾收集等功能的虚拟机上运行。

本白皮书 关于Java vs.C++ 性能可能值得一读。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top