在隐藏实现细节方面处理由两个其他对象组成的对象的最佳方法是什么?

时间:2016-01-30 10:01:08

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

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

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

这是最好的做法吗?我忽略了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

UML class diagram