小谈设计模式(12)—迪米特法则

简介: 小谈设计模式(12)—迪米特法则

专栏介绍

专栏地址

http://t.csdnimg.cn/VpriY

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。

迪米特法则

迪米特法则(Law of Demeter)也被称为最少知识原则(Least Knowledge Principle),是一种面向对象设计的原则,它强调一个对象应该尽量减少与其他对象之间的相互依赖。

核心思想

尽量减少对象之间的相互依赖,使对象之间的耦合度降低。具体来说,它强调一个对象应该只与其直接的朋友进行交互,而不与陌生的对象进行直接交互。

这里的“朋友”指

当前对象本身

一个对象可以调用自身的方法,因为它对自身的结构和行为是了解的。

以参数形式传入当前对象的对象

一个对象可以调用作为参数传入的对象的方法,因为它对传入的对象的结构和行为是了解的。

当前对象的成员变量直接引用的对象

一个对象可以调用它的成员变量直接引用的对象的方法,因为它对成员变量引用的对象的结构和行为是了解的。

目标

降低对象之间的耦合度,提高系统的可维护性、可扩展性和可复用性。通过限制对象之间的直接交互,减少了对象之间的依赖关系,使系统更加灵活、易于修改和测试。


遵循迪米特法则可以使系统的设计更加模块化,每个对象只需要关注自身的职责,而不需要了解其他对象的内部细节。这样可以降低系统的复杂性,提高代码的可读性和可维护性。同时,迪米特法则也有助于提高系统的可扩展性,因为减少了对象之间的直接依赖,新增功能时只需要修改少量的对象即可。

Java程序实现

// 定义一个学生类
class Student {
    private String name;

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

    public String getName() {
        return name;
    }
}

// 定义一个班级类
class Class {
    private String className;
    private List<Student> students;

    public Class(String className, List<Student> students) {
        this.className = className;
        this.students = students;
    }

    public String getClassName() {
        return className;
    }

    public List<Student> getStudents() {
        return students;
    }
}

// 定义一个学校类
class School {
    private String schoolName;
    private List<Class> classes;

    public School(String schoolName, List<Class> classes) {
        this.schoolName = schoolName;
        this.classes = classes;
    }

    public String getSchoolName() {
        return schoolName;
    }

    public List<Class> getClasses() {
        return classes;
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建学生对象
        Student student1 = new Student("Tom");
        Student student2 = new Student("Jerry");

        // 创建班级对象
        List<Student> students = new ArrayList<>();
        students.add(student1);
        students.add(student2);
        Class class1 = new Class("Class1", students);

        // 创建学校对象
        List<Class> classes = new ArrayList<>();
        classes.add(class1);
        School school = new School("School1", classes);

        // 输出学校的名称和班级的名称
        System.out.println("School Name: " + school.getSchoolName());
        for (Class c : school.getClasses()) {
            System.out.println("Class Name: " + c.getClassName());
        }

        // 输出班级中的学生姓名
        for (Class c : school.getClasses()) {
            for (Student s : c.getStudents()) {
                System.out.println("Student Name: " + s.getName());
            }
        }
    }
}

程序分析

学生类、班级类和学校类之间的关系是符合迪米特法则的。学生类只与班级类有直接的关联,班级类只与学校类有直接的关联,而学生类和学校类之间没有直接的关联。这样可以降低对象之间的耦合度,提高系统的灵活性和可维护性。


在客户端代码中,我们创建了一个学校对象,然后通过学校对象获取班级对象和学生对象,并输出它们的信息。通过迪米特法则,我们可以看到客户端代码只需要与学校类进行交互,而不需要了解班级类和学生类的内部细节,这样可以降低客户端代码与其他类的直接依赖,使系统更加灵活和易于维护。

总结

迪米特法则强调了对象之间的松耦合设计,通过减少对象之间的直接依赖,提高系统的灵活性和可维护性。遵循迪米特法则可以使系统更加模块化、可扩展和易于测试。

相关文章
|
5月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
3月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
设计模式 Java
Java设计模式七大原则-迪米特法则
Java设计模式七大原则-迪米特法则
64 0
|
设计模式
设计模式——迪米特法则
设计模式——迪米特法则
|
设计模式 XML JSON
【Java设计模式 经典设计原则】七 LOD迪米特法则
【Java设计模式 经典设计原则】七 LOD迪米特法则
112 0
|
设计模式
设计模式 - 六大设计原则之LoD(迪米特法则原则)
迪米特法(Law Of Demeter , LoD)则又叫最少知道原则(Least Knowledge Principle),最早是在1987年由美国Northeastern University的Ian Holland提出。 通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
193 0
设计模式 - 六大设计原则之LoD(迪米特法则原则)
|
设计模式
设计模式(6) -- 迪米特法则
设计模式(6) -- 迪米特法则
设计模式(6) -- 迪米特法则
|
设计模式
设计模式六大原则(五)----迪米特法则
设计模式六大原则(五)----迪米特法则
140 0
|
设计模式 Java
【Java设计模式】迪米特法则的详细介绍
【Java设计模式】迪米特法则的详细介绍
|
设计模式
寂然解读设计模式 - 迪米特法则
正确使用迪米特法则是可以让程序保证低耦合的,因为避免了与非直接的朋友通信,但是想要通信,就需要用到直接的朋友, 过分的使用迪米特原则,会产生很多这样没有必要的直接的朋友,导致系统复杂度变大,所以,在釆用迪米特法则时要进行权衡,保证系统的结构清晰
291 0