【问题标题】:Best way of handling object composed of two other objects in terms of hiding implementation details?就隐藏实现细节而言,处理由其他两个对象组成的对象的最佳方法是什么?
【发布时间】:2016-01-30 10:01:07
【问题描述】:

例如,我有一个名为 Car 的类,其中包含 AdminPart 和 PassengerPart 类型的两个字段。

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

对此有最佳实践吗?我忽略了什么?

【问题讨论】:

  • 客户端代码是什么意思?谁是客户以及如何访问这个对象?
  • getlicense() 是 AdminPart 的私有方法吗?
  • 如果你解释清楚应用程序结构我可以解释我的想法......我觉得你有点困惑
  • 只是不要为 Car 类实现 getAdminPart 方法...
  • @user2004685 是的,这是一个私有方法。

标签: java design-patterns law-of-demeter


【解决方案1】:

这个问题听起来与Law of Demeter 有关(我在您的问题中添加了标签)。这并不是真正的最佳实践——许多人声称这不是真正的“法律”,而是一种努力减少与信息隐藏方向相同的耦合的启发式(“建议”)。我最喜欢的解释是The Paperboy, the Wallet, and the Law of Demeter

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

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

【讨论】:

  • 是的,这就是我计划做的,如问题中所述。想知道是否有更漂亮的解决方案/要考虑的事情,我错过了。谢谢!
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2011-12-19
  • 2011-06-05
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多