Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在隐藏实现细节方面,处理由另外两个对象组成的对象的最佳方法是什么?_Java_Design Patterns_Law Of Demeter - Fatal编程技术网

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

Java 在隐藏实现细节方面,处理由另外两个对象组成的对象的最佳方法是什么?,java,design-patterns,law-of-demeter,Java,Design Patterns,Law Of Demeter,例如,我有一个名为Car的类,它包含两个类型为AdminPart和PassengerPart的字段 对于使用我的代码的客户端代码,我希望客户端代码能够执行car.getLicense(),而不是car.getAdminPart().getLicense()。这当然是在Car中实现为getLicense(),然后调用相关的getter。二传手也一样 这方面有最佳实践吗?我忽略了什么?这个问题听起来好像与问题有关(我在你的问题中添加了标签)。这并不是一个真正的最佳实践——许多人声称这并不是一个真正的

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

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


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

这个问题听起来好像与问题有关(我在你的问题中添加了标签)。这并不是一个真正的最佳实践——许多人声称这并不是一个真正的“定律”,而是一个启发式(“建议”),它致力于减少与信息隐藏方向相同的耦合。我最喜欢的解释是

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

下面是一个UML图,它解释了两种方法:


客户代码的含义是什么?谁是客户机以及如何访问此对象?
getlicense()
是AdminPart的私有方法吗?如果你解释好应用程序结构,我可以解释我的想法。。。我想你有点困惑,只是不为Car类实现getAdminPart方法…@user2004685是的,这是一个私有方法。是的,这就是我在问题中所说的计划。我想知道是否有更漂亮的解决方案/我缺少的东西需要考虑。谢谢