设计原则之迪米特法则

2023-07-11  本文已影响0人  Tinyspot

1. 迪米特法则(Law of Demeter,LoD

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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读