1. 迪米特法则(Law of Demeter,LoD
- 迪米特法则又叫作最少知道原则(Least Knowledge Principle,LKP),指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合
- 通俗表述方式
- 只与你直接的朋友们通信(Only talk to your immediate friends)
- 不要跟“陌生人”说话(Don't talk to strangers)
1.2 迪米特法则在设计模式中的运用
- 外观模式
- 中介者模式
1.3 日常生活场景
例如:校长想知道一个班级的总分和平均分,不该让校长直接管理学生,校长应该管理老师,由老师提供相应的学生信息查询服务,校长类只需要调用使用即可,而不需要了解每一位学生的分数
2. 实战
@Data
public class Customer {
private String name;
private Wallet wallet;
}
@Data
public class Wallet {
private double balance;
public void subtractMoney(double bill) {
balance -= bill;
}
}
public class Cashier {
public void charge(Customer customer, double bill) {
Wallet wallet = customer.getWallet();
if (wallet.getBalance() > bill) {
wallet.subtractMoney(bill);
} else {
System.out.println("余额不足");
}
}
}
优化后:
public class Cashier {
/**
* 分析:
* 收银员应该只负责收钱,不应该管钱包里的钱够不够
* 顾客应该管好自己的钱包,只负责判断要支付多少钱
*/
public void charge(Customer customer, double bill) {
boolean result = customer.pay(bill);
if (result) {
System.out.println("支付成功");
} else {
System.out.println("余额不足");
}
}
}
@Data
public class Customer {
private String name;
private Wallet wallet;
public boolean pay(double bill) {
if (this.wallet == null) {
return false;
}
if (wallet.getBalance() > bill) {
wallet.subtractMoney(bill);
return true;
}
return false;
}
}
@Data
public class Wallet {
private double balance;
public void subtractMoney(double bill) {
balance -= bill;
}
}
网友评论