Беседа о шаблонах проектирования (12) – Закон Димита

Введение в столбец

Адрес столбца

связь

Введение в столбец

В основном он анализирует и обобщает 23 распространенных шаблона дизайна, присутствующих в настоящее время на рынке, один за другим. Я надеюсь, что заинтересованные друзья смогут взглянуть на него, и он будет постоянно обновляться. Я надеюсь, что вы сможете контролировать меня, и мы сможем учиться и добиваться прогресса вместе.
Вставьте сюда описание изображения

Закон Деметры

Закон Деметры, также известный как принцип наименьшего знания, представляет собой принцип объектно-ориентированного проектирования, который подчеркивает, что объект должен минимизировать взаимозависимость с другими объектами.
Вставьте сюда описание изображения

Основная идея

Минимизируйте взаимозависимость между объектами и уменьшите связь между объектами. В частности, он подчеркивает, что объект должен взаимодействовать только со своими непосредственными друзьями, а не с незнакомыми объектами.

«Друзья» здесь относятся к

Вставьте сюда описание изображения

сам текущий объект

Объект может вызывать свои собственные методы, поскольку он понимает свою структуру и поведение.

Объект текущего объекта, переданный в качестве параметра

Объект может вызывать методы объекта, переданного в качестве параметра, поскольку он понимает структуру и поведение переданного объекта.

Объект, на который напрямую ссылаются переменные-члены текущего объекта.

Объект может вызывать методы объектов, на которые напрямую ссылаются его переменные-члены, поскольку он понимает структуру и поведение объектов, на которые ссылаются переменные-члены.

Цель

Уменьшите связь между объектами и улучшите удобство обслуживания, масштабируемость и возможность повторного использования системы. Ограничивая прямое взаимодействие между объектами, зависимости между объектами уменьшаются, что делает систему более гибкой, ее легче модифицировать и тестировать.

Следование закону Деметра может сделать конструкцию системы более модульной: каждому объекту нужно сосредоточиться только на своих обязанностях, не зная внутренних деталей других объектов. Это может снизить сложность системы и улучшить читаемость и удобство сопровождения кода. В то же время закон Деметры также помогает улучшить масштабируемость системы, поскольку уменьшает прямую зависимость между объектами, и при добавлении новых функций необходимо модифицировать лишь небольшое количество объектов.
Вставьте сюда описание изображения

реализация 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());
            }
        }
    }
}

анализ программы

Отношения между классом учеников, классом класса и школьным классом соответствуют закону Деметры. Класс ученика напрямую связан только с классом класса, класс класса напрямую связан только со школьным классом, и между классом ученика и школьным классом нет прямой связи. Это может уменьшить связь между объектами и повысить гибкость и удобство обслуживания системы.

В клиентском коде мы создаем объект школы, затем получаем объект класса и объект ученика через объект школы и выводим их информацию. Благодаря закону Димита мы видим, что клиентскому коду необходимо взаимодействовать только со школьным классом и не нужно знать внутренние детали класса и класса учащихся. Это может уменьшить прямую зависимость клиентского кода от других классов. и сделать систему более эффективной, гибкой и простой в обслуживании.
Вставьте сюда описание изображения

Подведем итог

Закон Деметра подчеркивает слабую связь между объектами, что повышает гибкость и удобство обслуживания системы за счет уменьшения прямых зависимостей между объектами. Следование закону Деметра может сделать систему более модульной, масштабируемой и тестируемой.

Acho que você gosta

Origin blog.csdn.net/weixin_74888502/article/details/133488473
Recomendado
Clasificación