迪米特法则原理(最少知道原则)

定义:是指一个对象类对于其他对象类来说,知道的越少越好。也就是说两个类之间不要有过多的耦合关系,保持最少关联性。

经典语录:只和朋友通信,不合陌生人说话。

也就是说有内在关联的类要内聚,没有直接关系的类要低耦合。

原始方法代码实现:

public class Principal {
    private Teacher teacher = new Teacher("梨花","三年级一班");

    //查询班级信息、总分、学生人数、平均分
    public Map<String,Object> queryClassInfo(){
        //获取班级信息:学生人数、总分、平均分

        //学生人数
        int stuCount = clazzStudentCount();
        //班级总成绩
        double totalScore = clazzTotalScore();
        //班级平均成绩
        double averageScore = clazzAgerageScore();

        //组装对象,实际开发过程中会有对应的类
        Map<String,Object> mapObj = new HashMap<>();
        mapObj.put("班级", teacher.getClazz());
        mapObj.put("老师姓名", teacher.getName());
        mapObj.put("学生人数", stuCount);
        mapObj.put("总分", totalScore);
        mapObj.put("平均分", averageScore);
        return mapObj;
    }

    private double clazzAgerageScore() {
        double totalScore = 0;
        for (Student stu : Teacher.getStudentList()) {
            totalScore += stu.getGrade();
        }
        return totalScore / Teacher.getStudentList().size();

    }

    private double clazzTotalScore() {

        double totalScore = 0;
        for (Student stu : Teacher.getStudentList()) {
            totalScore += stu.getGrade();
        }
        return totalScore;
    }

    private int clazzStudentCount() {

        return Teacher.getStudentList().size();
    }

    /**
     * 以上实现方法虽然简单可用,但是违背了迪米特法则,因为校长需要了解到每个学生的情况,
     * 如果所有班级都让校长统计的话,代码就会显得非常的臃肿,不利于维护和扩展
     */
}
public class Student {
    private String name; //学生姓名

    private int rank; //考试排名

    private double grade; // 总分

    public Student(String name, int rank, double grade) {
        this.name = name;
        this.rank = rank;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public Student setName(String name) {
        this.name = name;
        return this;
    }

    public int getRank() {
        return rank;
    }

    public Student setRank(int rank) {
        this.rank = rank;
        return this;
    }

    public double getGrade() {
        return grade;
    }

    public Student setGrade(double grade) {
        this.grade = grade;
        return this;
    }
}
public class Teacher {
    private String name; //老师姓名

    private String clazz; //班级

    private static List<Student> studentList; //学生人数

    public Teacher() {
    }

    public Teacher(String name, String clazz) {
        this.name = name;
        this.clazz = clazz;
    }

    static {
        studentList = new ArrayList<>();
        studentList.add(new Student("花花",10,580));
        studentList.add(new Student("豆豆",54 , 356));
        studentList.add(new Student("秋雅",23 , 500));
        studentList.add(new Student("屁屁",5 , 600));
        studentList.add(new Student("吉吉",2 , 655));
    }

    public String getName() {
        return name;
    }

    public Teacher setName(String name) {
        this.name = name;
        return this;
    }

    public String getClazz() {
        return clazz;
    }

    public Teacher setClazz(String clazz) {
        this.clazz = clazz;
        return this;
    }

    public static List<Student> getStudentList() {
        return studentList;
    }

    public static void setStudentList(List<Student> studentList) {
        Teacher.studentList = studentList;
    }
}

迪米特法则原理代码实现:

public class Principal {
    private Teacher teacher = new Teacher("梨花","三年级一班");

    //查询班级信息、总分、学生人数、平均分
    public Map<String,Object> queryClassInfo(){
        //获取班级信息:学生人数、总分、平均分

        //学生人数
        int stuCount = teacher.clazzStudentCount();
        //班级总成绩
        double totalScore = teacher.clazzTotalScore();
        //班级平均成绩
        double averageScore = teacher.clazzAgerageScore();

        //组装对象,实际开发过程中会有对应的类
        Map<String,Object> mapObj = new HashMap<>();
        mapObj.put("班级", teacher.getClazz());
        mapObj.put("老师姓名", teacher.getName());
        mapObj.put("学生人数", stuCount);
        mapObj.put("总分", totalScore);
        mapObj.put("平均分", averageScore);
        return mapObj;
    }
    /**
     * 以上实现方式采用迪米特原则,校长直接调用老师类的接口,并获取相应的信息,整个逻辑功能非常清晰
     */
}
public class Teacher {
    private String name; //老师姓名

    private String clazz; //班级

    private static List<Student> studentList; //学生人数

    public Teacher() {
    }

    public Teacher(String name, String clazz) {
        this.name = name;
        this.clazz = clazz;
    }

    static {
        studentList = new ArrayList<>();
        studentList.add(new Student("花花",10,580));
        studentList.add(new Student("豆豆",54 , 356));
        studentList.add(new Student("秋雅",23 , 500));
        studentList.add(new Student("屁屁",5 , 600));
        studentList.add(new Student("吉吉",2 , 655));
    }
    //平均分
    public double clazzAgerageScore() {
        double totalScore = 0;
        for (Student stu : com.yangtingjia.design_ruler.dimite.origin.Teacher.getStudentList()) {
            totalScore += stu.getGrade();
        }
        return totalScore / com.yangtingjia.design_ruler.dimite.origin.Teacher.getStudentList().size();

    }
    //总分
    public double clazzTotalScore() {

        double totalScore = 0;
        for (Student stu : com.yangtingjia.design_ruler.dimite.origin.Teacher.getStudentList()) {
            totalScore += stu.getGrade();
        }
        return totalScore;
    }
    //学生人数
    public int clazzStudentCount() {

        return com.yangtingjia.design_ruler.dimite.origin.Teacher.getStudentList().size();
    }


    public String getName() {
        return name;
    }

    public Teacher setName(String name) {
        this.name = name;
        return this;
    }

    public String getClazz() {
        return clazz;
    }

    public Teacher setClazz(String clazz) {
        this.clazz = clazz;
        return this;
    }

    public static List<Student> getStudentList() {
        return studentList;
    }

    public static void setStudentList(List<Student> studentList) {
        Teacher.studentList = studentList;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值