Java七大设计原则(7/7)——迪米特法则

定义

迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。

简而言之,就是与其他类交互越少越好,尽可能减少所受其他类的影响,降低耦合度。

代码实现

不使用迪米特法则

假设现在自己是Host,想玩英雄联盟了,没什么皮肤,想跟朋友John借个号爽爽。

定义John类

/**
 * @author John117
 * @date 2022/05/24  13:07
 */
public class John {
    Integer id = 114514;

    String password = "kksk";

    String  secret = "xxx";

    String address = "xxx";

    public Integer getId() {
        return id;
    }

    public String getPassword() {
        return password;
    }

    public String getSecret() {
        return secret;
    }

    public String getAddress() {
        return address;
    }

}

定义Host类

/**
 * @author John117
 * @date 2022/05/24  13:07
 */
public class Host {

    public void weGame(John john) {
        System.out.println("借到账号了:" + john.getId());

        System.out.println("也借到密码了:" + john.getPassword());
    }
    
}

测试

/**
 * @author John117
 * @date 2022/05/24  13:26
 */
public class Test {
    static John john = new John();

    public static void main(String[] args) {
        new Host().weGame(john);
    }

}

这么初看其实也没什么问题,但是仔细一看就会发现,这其实是违背了迪米特法则的。

本来只是想借个号,这种写法相当于把John搬到家里让他本人来输账号和密码。

一个类对于其他类知道的越少越好

这里的 weGame() 方法只需要接受 id 和 password,而不用接受整个John实体。

使用迪米特法则

John类如上,更改Host类

/**
 * @author John117
 * @date 2022/05/24  13:25
 */
public class Host {

    public void weGame(Integer id, String password) {
        System.out.println("借到账号了:" + id);

        System.out.println("也借到密码了:" + password);
    }
}

测试

/**
 * @author John117
 * @date 2022/05/24  13:28
 */
public class Test {

    static John john = new John();

    public static void main(String[] args) {
        // 在外面就将 id 和 password 拿到
        new Host().weGame(john.getId(), john.getPassword());
    }
}

这样就能减少了对John类的依赖,降低了耦合。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值