• 迪米特法则~


    迪米特法则是面向对象设计中的一个原则,它的目标是减少对象之间的直接依赖关系,它强调一个对象应该尽量减少与其他对象之间的直接交互只与自己的直接朋友进行通信,(所谓对象之间的朋友关系就是耦合关系,耦合的方式有很多:依赖、关联、组合,聚合等等。我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现在局部变量中的类不是直接朋友),这样可以避免一个对象过度了解其他对象的内部结构,从而减少代码的耦合性和依赖性提高代码的可维护性,降低系统的复杂性,并且方便进行单元测试和重构。

    举例:

    我们分别创建student,class,school,student和class之间建立直接朋友关系,school和class之间建立直接朋友关系,而student和school之间并没交互关系,减少了类之间的耦合度

    package druidResources;
    
    import java.util.ArrayList;
    import java.util.List;
    
    // 学生类
    class Student {
        private String name;
    
        public Student(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    
    // 班级类
    class Class {
    	//实现班级和学生交互
        private List<Student> students;
    
        public Class() {
            students = new ArrayList<>();
        }
    
        public void addStudent(Student student) {
            students.add(student);
        }
    
        public List<Student> getStudents() {
            return students;
        }
    }
    
    // 学校类
    class School {
    	//实现班级和学校交互
        private List<Class> classes;
    
        public School() {
            classes = new ArrayList<>();
        }
    
        public void addClass(Class clazz) {
            classes.add(clazz);
        }
    
        // 获取学校中所有学生的姓名
        public List<String> getAllStudentNames() {
            List<String> names = new ArrayList<>();
            for (Class clazz : classes) {
                for (Student student : clazz.getStudents()) {
                    names.add(student.getName());
                }
            }
            return names;
        }
    }
    
    public class LawOfDemeter {
        public static void main(String[] args) {
            // 创建学校对象
            School school = new School();
            // 创建班级对象
            Class class1 = new Class();
            Class class2 = new Class();
            // 创建学生对象
            Student student1 = new Student("张三");
            Student student2 = new Student("李四");
            Student student3 = new Student("王五");
            // 添加学生到班级
            class1.addStudent(student1);
            class1.addStudent(student2);
            class2.addStudent(student3);
            // 添加班级到学校
            school.addClass(class1);
            school.addClass(class2);
            // 获取学校中所有学生的姓名
            List<String> names = school.getAllStudentNames();
            // 打印学生姓名
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    输出:

    张三
    李四
    王五
    
    • 1
    • 2
    • 3
  • 相关阅读:
    MS Access 教程之如何将 MDB 文件转换为 SQLite 数据库
    高速口光口通信
    美团图灵机器学习平台性能起飞的秘密(一)
    vue3输入单号和张数,自动生成连号的单号
    基于Spark的智能餐饮推荐系统报告(只含部分代码)
    SSH项目集成DM达梦数据库
    Ubuntu - 安装向日葵与设置其开机自启
    J2EE进阶(九)org
    js表单autocomplete=‘off‘失效问题
    Docker容器
  • 原文地址:https://blog.csdn.net/m0_64365419/article/details/133215802