在隐藏实现细节方面处理由另外两个对象组成的对象的最佳方法?

Best way of handling object composed of two other objects in terms of hiding implementation details?

例如,我有一个名为 Car 的 class,它包含相应类型 AdminPart 和 PassengerPart 的两个字段。

对于使用我的代码的客户端代码,我希望客户端代码能够执行 car.getLicense() 而不是 car.getAdminPart().getLicense()。这当然在 Car 中实现为 getLicense(),后者又调用相关的 getter。二传手也一样。

有这方面的最佳实践吗?我忽略了什么?

这个问题听起来好像与 Law of Demeter (I added the tag to your question). It's not really a best practice -- many have claimed it's not really a "law" but rather an heuristic ("suggestion") that strives to reduce coupling in the same direction as information hiding. My favorite explanation is The Paperboy, the Wallet, and the Law of Demeter 有关。

封装 声明 Car 的客户不应该知道汽车的设计细节。否则,如果您更改这些细节,客户端代码可能会中断(并且您通常希望为客户端提供稳定的 API)。如果你允许客户端做car.getAdminPart().getLicense()你就是在泄露对象的细节,违反了信息隐藏和封装的原则。

这是一个解释这两种方式的 UML 图: