8.1 例子:编辑器文本类
Last updated
Last updated
考虑一下为 GUI 文本编辑器管理文件文本的类,这在和中讨论过。该类提供了将文件从磁盘读取到内存、查询和修改文件的内存副本,并将修改后的版本写回磁盘的方法。当学生不得不实现这个类时,他们中的许多人选择了面向行的接口,用方法来读取、插入和删除整行的文本。这导致了该类实现起来很简单,但它为更高级别的软件带来了复杂性。在用户界面层,操作很少涉及整行。例如,击键会导致在现有行中插入单个字符;复制或删除选择可以修改几个不同行的部分。使用面向行的文本接口,更高级别的软件必须分割和连接行以实现用户界面。
而像中所描述的面向字符的接口,则将复杂性往下拉动。用户界面软件现在可以插入和删除任意范围的文本,而不需要分割和合并行,因此变得更简单。文本类的实现可能会变得更加复杂:如果它在内部将文本表示为行的集合,它将不得不分割和合并行来实现面向字符的操作。这种方法更好,因为它将分割和合并的复杂性封装在文本类中,从而降低了系统的整体复杂性。