gpt4 book ai didi

java - java 的得墨忒尔法则

转载 作者:行者123 更新时间:2023-11-30 02:34:08 25 4
gpt4 key购买 nike

我一直在构建 RTS 来提高我的 Java 技能。我已经阅读了很多有关德米特定律的内容,因为我想保持代码干净,但我仍然很困惑!目前,我在 View 中有一些类似这样的代码,以显示所选星球上的舰队中有多少艘特定的船只:

int numberOfFrigates = model.getSelectedPlanet().getFleet().getNumberOfFrigates();

据我了解,这违反了德墨忒尔法则。如果我只应该有“一个点”,我是否必须在每个类中都有一个方法来从下一个类中获取信息?看起来很麻烦。

最佳答案

Law Of Demeter遵循信息隐藏的原则,努力减少对象之间的耦合。在您的示例中,方法 m 包含以下语句:

int numberOfFrigates = model.getSelectedPlanet().getFleet().getNumberOfFrigates();

仅对护卫舰的数量感兴趣。但方法调用链确实将方法 m 以及拥有 m 的类型 TgetSelectedPlanet() 返回的类型耦合起来getFleet()

避免引入这种依赖关系的解决方案是向您的模型添加一个方法,该方法直接返回当前所选飞机的护卫舰数量,例如:

int numberOfFrigates = model.getNumberOfFrigates();

但大多数情况下,违反原则是设计不当或责任不当的表现。这个问题的真正解决方案很可能不是像上面所示的例子那样直接向消费​​者公开方法链获得的信息,而是通过将处理的部分或整个责任移近保存所需信息的对象。

为了在您的示例中尽可能具体,请问自己:

Why do I need the number of frigates in my method m?

May I move parts of processing done in m closer to the types Planet or Fleet?

这样您也可以避免方法链。

关于java - java 的得墨忒尔法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43538605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com