软件设计七大原则:(五)迪米特原则

一、迪米特原则简介

  • 定义:一个对象应该对其他对象保持最少的了解。又叫最少知道原则。
  • 尽量降低类与类之间的耦合
  • 优点:降低类之前的耦合
  • 强调只和朋友交流,不和陌生人说话
  • 什么是朋友类?
    朋友类指的是出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

二、代码实现

1.违背迪米特原则的反例

public class Course {
    
    
}
public class Boss {
    
    
    public void commandCheckNumber(TeamLeader teamLeader) {
    
    
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
    
    
            courseList.add(new Course());
        }
        teamLeader.checkNumberOfCourses(courseList);
    }
}
public class TeamLeader {
    
    
    public void checkNumberOfCourses(List<Course> courseList) {
    
    
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
    
    
            courseList.add(new Course());
        }
        teamLeader.checkNumberOfCourses(courseList);
        System.out.println("在线课程的数量是:"+courseList.size());
    }
}
public class DemeterTest {
    
    
    public static void main(String[] args) {
    
    
        Boss boss = new Boss();
        TeamLeader teamLeader = new TeamLeader();
        boss.commandCheckNumber(teamLeader);
    }
}

2.遵循迪米特原则的正确示范

public class Course {
    
    
}
public class Boss {
    
    
    public void commandCheckNumber(TeamLeader teamLeader) {
    
    
        teamLeader.checkNumberOfCourses();
    }
}
public class TeamLeader {
    
    
    public void checkNumberOfCourses() {
    
    
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
    
    
            courseList.add(new Course());
        }
        System.out.println("在线课程的数量是:"+courseList.size());
    }
}
public class DemeterTest {
    
    
    public static void main(String[] args) {
    
    
        Boss boss = new Boss();
        TeamLeader teamLeader = new TeamLeader();
        boss.commandCheckNumber(teamLeader);
    }
}

三、关于迪米特原则的理解

/**
* 理解起来也比较简单,最重要的是要分清楚哪些类是直接的朋友,
* 哪些类不是朋友。
* 以上面代码为例,Boss不需要关心Course的内容,
* 它只需要给TeamLeader指令,然后得到指定结果即可。
*/

猜你喜欢

转载自blog.csdn.net/qq_41378597/article/details/106601826