迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则,其核心思想是降低耦合度、减少对象之间的依赖关系,从而使系统更加灵活、易于维护和扩展。
根据迪米特法则,一个对象应该对其他对象有尽可能少的了解,只与其直接朋友进行交互。直接朋友指的是以下几种情况:
- 该对象本身
 - 该对象的成员对象
 - 方法参数中的对象
 - 方法内部创建的对象
 
迪米特法则的目标在于降低类之间的耦合度,避免在一个类中引入过多的依赖,以减少系统中各个类之间的直接联系,从而减少系统的复杂性,提高系统的可维护性和灵活性。
实践迪米特法则可以通过以下几点来实现:
- 在设计类时,尽量减少类之间的直接关联,避免在一个类中直接调用另一个类的方法。
 - 引入中介者或外观模式,将复杂的交互逻辑封装在一个中介对象中,减少对象之间的直接通信。
 - 使用接口来定义对象之间的通信协议,而不是直接依赖具体的类。
 
遵循迪米特法则可以使系统更加灵活,降低代码的耦合度,提高代码的可维护性和扩展性。
#include <iostream>
// 学生类
class Student {
public:
    Student(std::string name) : name(name) {}
    std::string getName() { return name; }
private:
    std::string name;
};
// 班级类
class Classroom {
public:
    void addStudent(Student* student) {
        students.push_back(student);
    }
private:
    std::vector<Student*> students;
};
// 学校类
class School {
public:
    void addClassroom(Classroom* classroom) {
        classrooms.push_back(classroom);
    }
private:
    std::vector<Classroom*> classrooms;
};
int main(int argc, char *argv[])
{
    // 创建学生对象
    Student* student1 = new Student("Alice");
    Student* student2 = new Student("Bob");
    // 创建班级对象并添加学生
    Classroom* classroom1 = new Classroom();
    classroom1->addStudent(student1);
    classroom1->addStudent(student2);
    // 创建学校对象并添加班级
    School* school = new School();
    school->addClassroom(classroom1);
    // 释放内存
    delete student1;
    delete student2;
    delete classroom1;
    delete school;
    return 0;
}
/*
在上述 C++ 代码中,同样实现了学生、班级和学校三个类的关系,确保每个类只与其直接朋友进行交互,遵循了迪米特法则。学生类知道自己的名字,班级类知道如何管理学生,学校类知道如何管理班级,它们之间的关系清晰明了,没有直接依赖于其他类的内部细节。这样的设计有助于降低耦合度,提高代码的可维护性和灵活性。
*/ 
觉得有帮助的话,打赏一下呗。。
           


















