# 7.4 接口与实现

“不同的层，不同的抽象”规则的另一个应用是，一个类的接口通常应该与它的实现不同：内部使用的表示方法应该与出现在接口中的抽象不同。如果两者的抽象相似，那么这个类可能就不是很深。例如，在第6章讨论的文本编辑器项目中，大多数团队以文本行为单位实现了文本模块，每行单独存储。一些团队还围绕行来设计文本类的API，如`getLine`和`putLine`等方法。然而，这使文本类变得浅且难以使用。在更高级别的用户界面代码中，在行的中间插入文本（例如，当用户正在打字时）或删除跨行的一段文本是很常见的。使用文本类的面向行的API，调用者被迫分割和连接行来实现用户界面的操作。这段代码并不简单，而且它被重复并分散在用户界面的实现中。

当文本类提供面向字符的接口时，使用起来就容易多了，比如一个`insert`方法可以在文本的任意位置插入一个任意的文本字符串（可能包括换行符），一个`delete`方法可以在文本的两个任意位置之间删除文本。在内部，文本仍然以行为单位表示。一个面向字符的接口将行的分割和连接的复杂性封装在文本类内部，这使得文本类更深，并简化了使用该类的高级别代码。采用这种方法，文本API与面向行的存储机制有很大的不同；这种不同表示该类提供了有价值的功能。
