前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件架构设计原则--迪米特原则

软件架构设计原则--迪米特原则

作者头像
向着百万年薪努力的小赵
发布2022-12-02 10:20:31
2440
发布2022-12-02 10:20:31
举报
文章被收录于专栏:小赵的Java学习

本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删

  迪米特原则(Law of Demeter,LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。   迪米特原则主要强调:只和朋友交流,不与陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以被称为成员朋友类,二出现在方法体内部的类不属于朋友类。   假设现在来设计一个权限系统,Boss需要查看目前发布到线上的课程数量。这时,Boss要找到Leader去统计,leader再把统计结果告诉boss,还是以代码讲解: 课程Course类:

代码语言:javascript
复制
public class Course {
}

leader类:

代码语言:javascript
复制
public class Leader {
    public void checkNumberCourse(List<Course> courseList){
        System.out.println("目前已发布的课程数量是:"+courseList.size());
    }
}

Boss类:

代码语言:javascript
复制
public class Boss {
    public void commandCheckNumber(Leader leader){
        //模拟翻页查阅,leader实时统计
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            courseList.add(new Course());
        }
        leader.checkNumberCourse(courseList);
    }
}

执行:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Boss boss = new Boss();
        Leader leader = new Leader();
        boss.commandCheckNumber(leader);
    }
}
在这里插入图片描述
在这里插入图片描述

  写到这里,功能其实已经实现,代码看上去好像也没什么问题。   根据迪米特原则,Boss只想要结果,不需要跟Course直接交流。而Leader统计需要引入Course对象。Boss和Course并不是朋友,但好像还有一点关联,让我们再更改一下 Boss类:

代码语言:javascript
复制
public class Boss {
    public void commandCheckNumber(Leader leader){
        leader.checkNumberCourse();
    }
}

Leader类:

代码语言:javascript
复制
public class Leader {
    public void checkNumberCourse(){
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            courseList.add(new Course());
        }
        System.out.println("目前已发布的课程数量是:"+courseList.size());
    }
}

  这时,Boss类已经与Course没有任何直接关联了。   另外,学习软件设计原则,不能形成强迫症。碰到业务负责的场景,需要随机应变。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档