美文网首页
设计原则之迪米特法则

设计原则之迪米特法则

作者: Tinyspot | 来源:发表于2023-07-11 21:21 被阅读0次

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;
    }
}

相关文章

  • [Code Design] 六大设计原则之`迪米特法则`

    六大设计原则之迪米特法则 定义 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Know...

  • 迪米特法则

    个人博客原文:迪米特法则 设计模式六大原则之五:迪米特法则。 简介 姓名:迪米特法则 英文名:Law of Dem...

  • 迪米特法则

    迪米特法则 迪米特法则定义 迪米特法则(Law Of Demeter, LoD) 也成为最少知识原则(Least ...

  • 迪米特法则

    迪米特法则 迪米特法则的定义 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least K...

  • [设计原则] 六大设计原则之“迪米特法则”

    [设计原则] 六大设计原则之“迪米特法则” @TOC 手机用户请横屏获取最佳阅读体验,REFERENCES中是本文...

  • 设计模式学习之迪米特法则

    迪米特法则(LOD) 迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowl...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

  • 第11章 无熟人难办事?--迪米特法则

    迪米特法则 迪米特法则(LoD)也叫最少知识原则。[J&DP] 迪米特法则(LoD),如果两个类不必彼此直接通信,...

  • 设计原则之迪米特法则

    1. 定义 每个模块只应该了解那些与它关系密切的模块的有限知识。或者说,每个模块只和自己的朋友“说话”,不和陌生人...

  • 读《设计模式之禅》(二)

    上次看了设计模式的6大设计原则,单一职责原则、开闭原则、迪米特法则、里氏替换原则、接口隔离原则、依赖倒置原则。这次...

网友评论

      本文标题:设计原则之迪米特法则

      本文链接:https://www.haomeiwen.com/subject/cksuudtx.html