当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”,程序本身将向用户提供服务,他通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者最好是在现有的代码库中寻找)能够提供理想的服务来解决问题的一系列对象。
着手从事这件事的方式就是问一下自己:“如果我可以将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题呢?”。例如:假设你正在创建一个簿记系统,那么可以想象,系统应该具有某些包括了预定义的簿记输入屏幕的对象,一个执行簿记计算的对象集合以及一个处理在不同打印机上打印支票和开发票的对象。也许上述对象中的某些已经存在了,但是对于那些并不存在的对象,它们看起来像什么样子?他们能够提供哪些服务?他们需要哪些对象才能履行它们的义务?如果持续这样做, 那么最终你会说:“我肯定那个对象已经存在了”。这是将问题分解为对象集合的一种合理的方式。
将对象看作是服务提供者还有一个附带的好处:它有助于提高对象的内聚性。高内聚事如啊你按设计的基本质量要求之一:这意味着一个软件构件(例如一个对象,当然他也有可能是指一个方法或一个对象库)的各方面“组合”的很好。人们再设计面向对象程序是所面临的一个问题是:将过多的功能都塞在一个对象中。例如,在检查打印模式的模块中,你可以这样设计一个对象,让它了解所有的格式和打印技术。你可能会发现,这些功能对于一个对象来说太多了,你所需要的是三个甚至更多个对象,其中,一个对象可以是所有可能的支票排版的目录,他可以被用来查询有关如何打印一张支票的信息;另一个对象(或对象集合)可以是一个通用的打印接口,他知道有关所有的不同类型的打印机的信息(但是不包括任何有关簿记的内容,它更应该是一个需要购买而不是自己编写的对象);第三个对象通过调用其他两个对象的服务来完成打印任务。这样,每个对象都有一个它所能提供服务的内聚的集合。在良好的面向对象设计中,每个对象都可以很好地完成一项任务,但是他并不试图做更多的事。就像在这里看到的,不仅允许通过购买获得某些对象(打印机接口对象),而且还可以创建能够在别处服用的新对象(支票排版目录对象)。
将对象作为服务提供者看待是一件伟大的简化工具,这不仅在设计过程中非常有用,而且当其他人师徒理解你的代码或重用某个对象时,如果他们看出了这个对象所能提供的服务的价值,这回事调整对象以适应其设计的过程变得简单很多。
总结:
①将对象看做服务提供者可以简化问题
②有助于提高对象的内聚性
③提高可阅读性跟重用性
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于