2.1.3 一个接口/实现示例

我们来创建一个简单的(如果不是很实用的)读取数据库的类。我们将编写一些Java代码,这些代码会从数据库中获取记录。正如之前讨论的一样,在进行任何设计时,识别终端用户一直是最重要的问题。你可能需要做一些场景分析,与终端用户进行面谈,然后列出这个项目的需求。接下来是我们对这个数据库阅读器的需求:

·必须能打开到数据库的连接

·必须能关闭到数据库的连接

·必须能将光标指向数据库中的第一条记录

·必须能把光标指向数据库中的最后一条记录

·必须能得到数据库中的记录条数

·必须能知道当前数据库中是否仍有记录(当前指向的是否是最后一条记录)

·必须能够根据键值把光标指向特定的记录

·必须能够获取指定键值的记录

·必须能基于当前光标的位置获取下一条记录

根据以上需求,可以开始尝试设计一个读取数据库的类,为终端用户设计可能的接口。

在本例中,读取数据库的类仅提供给想使用数据库的程序员。因此接口本质上是程序员想要使用的应用程序编程接口(Application-Programming Interface,API)。这些方法其实封装了数据库系统暴露的功能。为什么要这么做?在本章的后面我们会详细讨论该问题。简短的回答是我们需要定制数据库功能。例如,我们必须处理对象从而可以将它们写入到关系型数据库中。编写这样的中间件对于设计和编码而言可能并不简单,但这是封装特性的真实示例。最重要的是,如果我们想替换数据库引擎,则无须修改大量代码。

图2.2展示了一个类图,表示了Data-BaseReader类的潜在接口。

请注意该类中的方法都是公共方法(请记住靠近方法名的加号表示该方式是一个公共接口)。而且这里只展示了接口,没有展示任何实现。请花一分钟来确定这个类图是否能大体满足上面列出的项目需求。如果你之后发现该类图没有满足所有需求也没关系。因为面向对象设计是一个迭代的过程,所以你无须一开始就保证它绝对正确。 ...

Get 面向对象的思考过程(原书第5版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.