对象,以及一个能在各种打印机上打印支票和发票的对象。有些对象或许已经有了, 但是那些还没有的应该是什么样的呢?它们应该提供哪种服务, 还有它们要完成任务的话, 又该用哪些对象呢?如果你不断分析下去, 最终你会发现, 不是“那个对象写起来很容易”就是“那个对象已经有了。”这是将问题分解成一组对象的一个合理的方法。将对象视作为服务的提供者还有一个额外的优点: 能提高对象的内聚星。内聚性高是高质量的软件设计一个基本要求:就是说软件的各种组将应该能很好的“组装在一起”设计对象时常犯的一个错误就是, 往对象里塞了太多的功能。举例来说, 设计支票打印模块的时候, 你也许会决定设计一个能通晓所有排格式和打印工作细节的对象。很快你就会发现这个任务太艰巨了, 或许应该用三个或是更多对象来完成这个工作。第一个对象应该是支票格式的目录册, 通过查询这个目录册可以获取得该如何打印支票的信息。第二个对象, 或是一组对象, 应该是能分辨各种打印机的通用的打印接口。以及使用上述两个对象所提供的服务的, 能最终完成任务的第三个对象。由此每个对象都提供一组互补的功能。在一个良好的面向对象的设计中, 每个对象都应该只做一件事, 并且做好一件事, 而不是去做太多的事情。就像这里看到的, 这样不仅能发现那些对象因该买( 打印机接口对象), 而且能设计出今后能复用的对象(支票格式的目录册)。将对象视作服务的提供者还是一种很了不起的简化工具。它不仅在设计过程中有用, 而且还能帮助别人理解你的代码或者复用这个对象—如果它们认同这个对象所提供的服务的话。将对象视作服务的提供者能使对象更容易被用于设计. 原文来源: Publisher :Prentice Hall PTR Pub Date :December 6,2002 ISBN :0131002872 Pages :752 Supplier : Bruce Eckel