如何实现“最少知识”代码?

在实际的软件开发中,我们经常会写下面这样的代码:

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

代码看上去没有太大的问题,但实际上其中任意一个方法发生变化时,这段代码都需要修改。因为调用是依赖的每一个细节,不仅增加了耦合,也使代码结构僵化。

迪米特法则正是为了避免对象间出现这样过多的细节依赖而被提出来,所以今天我们就来一起了解下迪米特法则带给我们的一些启示。

1、什么是迪米特法则

迪米特法则(Law of Demeter,简称 LoD) 是由 Ian Holland 于 1987 年提出来的,它的核心原则是:

  • 一个类只应该与它直接相关的类通信;

  • 每一个类应该知道自己需要的最少知识。

换句话说,在面向对象编程中,它要求任何一个对象(O)的方法(m),只应该调用以下对象:

  • 对象(O)自身;

  • 通过方法(m)的参数传入的对象;

  • 在方法(m)内创建的对象;

  • 组成对象(O)的对象;

  • 在方法(m)的范围内,可让对象(O)访问的全局变量。

在分层架构中,每一层的模块只能调用自己层中的模块,跳过某一层直接调用另一层中的模块其实就是违反了分层架构的原则。

虽然迪米特法则符合封装的原理,但是却和聚合原则相冲突,因为对象需要尽可能少地考虑其他对象,不能轻易地和其他对象自由组合。

如何实现满足迪米特法则的代码

下面我们通过一个经典案例来看下如何去实现满足迪米特法则的代码。

假设一个在超市购物的场景:顾客选好商品后,到收银台找收银员结账。这里我们定义一个顾客类(Customer)、收银员类(PaperBoy )、钱包类(Wallet ),示例代码如下:

//顾客
public class Customer {
   
    private String firstName;
    private String lastName;
    private Wallet myWallet;
    public String getFirstName(){
   
        return firstName;</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱娃哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值