迪米特法则并非真正的法则,但它指定了一种样式准则:绝不调用从另一个调用中获取的对象的方法。 遵循此准则的代码更容易维护、调整和重构,方法之间的耦合更少,重复更少,信息隐藏得更好。 另一方面,您可能需要编写许多包装器方法才能满足这一准则。
示例:
boolean pay(Customer c, Invoice invoice) {
int dollars = c.getWallet().contents; // 违规
if (dollars >= invoice.getAmount()) {
Wallet w = c.getWallet();
w.subtract(invoice.getAmount()); // 违规
return true;
}
return false;
}
上面的示例可以更好地实现为 Customer
中的 payInvoice(Invoice invoice)
方法。
使用忽略对库方法的调用和对库字段的访问选项可以忽略不更改库就无法修正的违反迪米特法则的情况。