Java核心编程
上QQ阅读APP看书,第一时间看更新

3.5 对象提供服务

当设计一个程序时,需要将对象想象成一个服务的供应商。对象提供服务给用户,解决不同的问题。比如,在设计一个图书管理软件时,你可能设想一些对象包含了哪些预定义输入,其他对象可能用于图书的统计,一个对象用于打印的校验等。这都需要将一个问题分解成一组对象。

将对象的思考作为服务供应商有一个额外的好处:有助于改善对象的凝聚力。高内聚(High cohesion)是软件设计的基本质量:这意味着,一个软件组件的各方面(如对象,尽管这也可以适用于一个方法或一个对象的库)“结合在一起”。在设计对象时经常出现的问题是将太多的功能合并到一个对象里面。例如,在支票打印模块,你可以决定你需要知道的所有有关格式和打印的对象。你可能会发现,这对于一个对象来说有太多的内容,你需要3个或3个以上的对象:一个对象用于查询有关如何打印一张支票的信息目录;一个对象(或一组对象)可以是知道所有不同类型的打印机的通用打印接口;第三个对象可以使用其他两个对象的服务来完成任务。因此,每个对象都有一套它提供的有凝聚力的服务。在良好的面向对象设计中,每个对象都会做好一件事,但不会尝试做太多。

将对象作为服务供应商是一个伟大的简化工具。这不仅在设计过程中是非常有用的,在别人试图理解你的代码或重用的对象时也很有用。如果能得知根据它提供什么样的服务获得对象的值,那么就可以更容易地在设计中使用它。