五、设计原则之迪米特法则

今天的博客主题

      设计原则和模式 --》设计原则之迪米特法则


迪米特原则 LoD (Law of Demeter )

 

迪米特法则又叫最少知道原则 LKP (Least Knowledge Principle)

就是尽量降低类与类之间的耦合。一个对象应该对其他对象保持最少知道原则。

迪米特原则主要强调只和朋友说话,不和陌生人说话。

一般出现在成员变量,方法的输入,输出参数中的类都可以称之为成员朋友类,出现在方法体内部的类不属于朋友类。

 

场景

领导想知道目前商城正在销售的手机类型,及每个手机类型的销售额。这时候他找到手机负责人,手机负责人需要去统计结果,然后将结果汇报给领导。

代码设计

手机业务类

public class PhoneBusiness {
    public String sale(String phone, Double money){
        return "手机:" + phone + " 销售额:" + money;
    }
}

手机负责人类

public class TeamLeader {
    public void reportPhone(List<PhoneBusiness> phoneBusinessList){
        for (int i = 0; i < phoneBusinessList.size(); i++) {
            System.out.println(phoneBusinessList.get(0).sale("huawei note " + i, 10325.55 + i));
        }
    }
}

领导类

public class Boss {
    public void checkPhone(TeamLeader teamLeader) {
        List<PhoneBusiness> phoneBusinessList = new ArrayList<PhoneBusiness>();
        // boss 一一查看,领导实时去统计
        for (int i = 0; i < 10; i++) {
            phoneBusinessList.add(new PhoneBusiness());
        }
        teamLeader.reportPhone(phoneBusinessList);
    }
}

测试

public class DemoLKP {
    public static void main(String[] args) {
        Boss boss = new Boss();
        TeamLeader teamLeader = new TeamLeader();
        boss.checkPhone(teamLeader);
    }
}
输出
手机:huawei note 0 销售额:10325.55
手机:huawei note 1 销售额:10326.55
手机:huawei note 2 销售额:10327.55
手机:huawei note 3 销售额:10328.55
手机:huawei note 4 销售额:10329.55
手机:huawei note 5 销售额:10330.55
手机:huawei note 6 销售额:10331.55
手机:huawei note 7 销售额:10332.55
手机:huawei note 8 销售额:10333.55
手机:huawei note 9 销售额:10334.55

到这里基本上功能算是实现了,看上去也没什么问题。

那么根据迪米特法则的定律,Boss 想知道结果是不用和 PhoneBusiness 直接产生联系的,TeamLeader 是他们之间的桥梁。

Boss 和 PhoneBusiness 并不是朋友关系。通过类图看下

改造下代码

领导类

public class Boss {
    public void checkPhone(TeamLeader teamLeader) {
        teamLeader.reportPhone();
    }
}

手机负责人类

public class TeamLeader {
    public void reportPhone(){
        List<PhoneBusiness> phoneBusinessList = new ArrayList<PhoneBusiness>();
        for (int i = 0; i < 10; i++) {
            System.out.println(phoneBusinessList.get(0).sale("huawei note " + i, 10325.55 + i));
        }
    }
}

别的地方都不用修改。在看下类图

Boss 和 PhoneBusiness 就没有任何交集了是吧。

遇到复杂的业务逻辑,随机应变才是王道...

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值