大话设计模式之迪米特法则

发布于:2024-04-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则,其核心思想是降低耦合度、减少对象之间的依赖关系,从而使系统更加灵活、易于维护和扩展。

根据迪米特法则,一个对象应该对其他对象有尽可能少的了解,只与其直接朋友进行交互。直接朋友指的是以下几种情况:

  1. 该对象本身
  2. 该对象的成员对象
  3. 方法参数中的对象
  4. 方法内部创建的对象

迪米特法则的目标在于降低类之间的耦合度,避免在一个类中引入过多的依赖,以减少系统中各个类之间的直接联系,从而减少系统的复杂性,提高系统的可维护性和灵活性。

实践迪米特法则可以通过以下几点来实现:

  1. 在设计类时,尽量减少类之间的直接关联,避免在一个类中直接调用另一个类的方法。
  2. 引入中介者或外观模式,将复杂的交互逻辑封装在一个中介对象中,减少对象之间的直接通信。
  3. 使用接口来定义对象之间的通信协议,而不是直接依赖具体的类。

遵循迪米特法则可以使系统更加灵活,降低代码的耦合度,提高代码的可维护性和扩展性。

#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++ 代码中,同样实现了学生、班级和学校三个类的关系,确保每个类只与其直接朋友进行交互,遵循了迪米特法则。学生类知道自己的名字,班级类知道如何管理学生,学校类知道如何管理班级,它们之间的关系清晰明了,没有直接依赖于其他类的内部细节。这样的设计有助于降低耦合度,提高代码的可维护性和灵活性。
*/

觉得有帮助的话,打赏一下呗。。