
上QQ阅读APP看书,第一时间看更新
2.3.4 识别公共接口
我们已经收集到了用户信息、对象行为和环境信息,接下来需要为每个用户对象指定公共接口。所以,想象一下会如何使用出租车对象:
·上车
·告诉司机你想去哪里
·付车费
·给司机小费
·下车
你需要做什么才能使用出租车对象?
·知道去哪里
·租用出租车
·付给司机钱
刚开始,你只需考虑如何使用这个对象,不用思考如何构建这个对象。稍后你可能会发现对象需要更多的接口,比如“把行李放到后备厢中”或者“和司机进行随意交谈”。图2.7提供了一个类图来列出Cabbie类的可能的方法。

图2.7 Cabbie类中的方法
得到最终的接口始终是一个迭代的过程。你必须确定每个接口是否有助于对象的操作。如果不是,那么它可能没必要存在。很多面向对象的文章推荐每个接口模型只包含一个行为。这带给我们的问题是设计究竟要抽象到哪种层次。如果有一个叫作enterTaxi()的接口,我们肯定不想enterTaxi()包含付费的逻辑。这样做不仅设计上毫无道理,而且事实上该类的使用者会不知道到底如何付费。