# 8.1 例子：编辑器文本类

考虑一下为 GUI 文本编辑器管理文件文本的类，这在[第 6 章](../ch6-general-purpose-modules-are-deeper)和[第 7 章](../ch7-different-layer-different-abstraction)中讨论过。该类提供了将文件从磁盘读取到内存、查询和修改文件的内存副本，并将修改后的版本写回磁盘的方法。当学生不得不实现这个类时，他们中的许多人选择了面向行的接口，用方法来读取、插入和删除整行的文本。这导致了该类实现起来很简单，但它为更高级别的软件带来了复杂性。在用户界面层，操作很少涉及整行。例如，击键会导致在现有行中插入单个字符；复制或删除选择可以修改几个不同行的部分。使用面向行的文本接口，更高级别的软件必须分割和连接行以实现用户界面。

而像[第6.3节](../ch6-general-purpose-modules-are-deeper/6.3-yi-ge-geng-tong-yong-de-api)中所描述的面向字符的接口，则将复杂性往下拉动。用户界面软件现在可以插入和删除任意范围的文本，而不需要分割和合并行，因此变得更简单。文本类的实现可能会变得更加复杂：如果它在内部将文本表示为行的集合，它将不得不分割和合并行来实现面向字符的操作。这种方法更好，因为它将分割和合并的复杂性封装在文本类中，从而降低了系统的整体复杂性。
