Nem*_*nja 0 java oop law-of-demeter
我试图理解德米特定律。这个例子(取自《实用程序员》一书中)让我感到困惑。任务是根据德米特法则确定是否允许显示的方法调用。
public void showBalance(BankAccount acct) {
Money amt = acct. getBalance() ;
printToScreen(amt .printFormat()) ;
}
Run Code Online (Sandbox Code Playgroud)
在回应这个任务时,写到它违反了德墨忒尔定律,但我不明白为什么?根据得墨忒耳定律,对象 O 的方法 M 应该只调用以下方法:
该对象amt是在方法内部本地创建的showBalance(BankAccount acct),我们正在getBalance()根据规则 4 允许对该对象调用方法。这让我感到困惑。
该对象amt不是在内部创建的showBalance- 您可以通过对 的方法调用来检索它getBalance。
您不能仅通过将值提取到局部变量来绕过 Demeter 定律,它需要仔细设计。你的代码相当于这个,应该被LoD禁止:
printToScreen(acct.getBalance().printFormat());
Run Code Online (Sandbox Code Playgroud)