首页 > 其他分享 > 小谈设计模式(12)—迪米特法则

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

时间:2023-12-06 13:32:48浏览次数:39  
标签:米特 12 String 小谈 对象 students Student 设计模式 public

(小谈设计模式(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());
            }
        }
    }
}

程序分析

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

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

总结

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

标签:米特,12,String,小谈,对象,students,Student,设计模式,public
From: https://blog.51cto.com/u_16193391/8702554

相关文章

  • 12.6日记
    JFinal是一款基于Java语言的轻量级、高性能的MVC框架,它在功能上延续了传统的JavaWeb开发框架的优点,同时也具有简洁的设计和强大的扩展性。以下是JFinal框架的主要功能和特点:MVC架构:JFinal遵循经典的MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、......
  • 设计模式(十六)迭代器
    一、定义提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。迭代器模式是一种对象行为型模式,又称为游标(Cursor)模式。二、描述在软件系统中,聚合对象拥有两个职责:一是存储数据,二是遍历数据。从依赖性来看,前者是聚合对象的基本职责,而后者既是可变化的,又是......
  • 【2023-12-05】积极就好
    20:00你是我的,我是你的,你可知晓,这个秘密。你已锁进,我的心里。小小钥匙,已经遗失。你也必将,永驻我心。                                                 ——古人近期每......
  • 12-6
    实验一:百度机器翻译SDK实验--代码及遇到的问题首先这是代码:具体的操作步骤下面一篇窗口的:packagebaidu;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclasstranslate{publics......
  • 使用技巧 | 红米 Redmi Note 12 Turbo优化记录(去广告等)
    原文链接:https://engapi.com/article/7569原文也是我写的。我的红米Redminote8pro6+128已有些卡顿,遂在K70推出之际下单了RedmiNote12Turbo16+1T当备机。以下记录红米Note12Turbo去广告和优化过程,小米/红米系列都可参考。1.去广告系统设置参考这里:小米/红米手机如何......
  • leetcode-1512-easy
    NumberofGoodPairsGivenanarrayofintegersnums,returnthenumberofgoodpairs.Apair(i,j)iscalledgoodifnums[i]==nums[j]andi<j.Example1:Input:nums=[1,2,3,1,1,3]Output:4Explanation:Thereare4goodpairs(0,3),(0,4),(......
  • go设计模式之工厂模式
    Go语言实现设计模式之工厂方法模式原创 汀风 汀风说后端 2023-12-0608:10 发表于北京汀风说后端编程知识普及,让学习与工作变得更简单。18篇原创内容公众号摘要:工厂方法模式是一种创建型设计模式,它将对象的创建延迟到子类中进行,通过定义一个创建对......
  • 12 5阅读笔记
    《刻意练习》阅读笔记:第二部分:大脑的适应能力 大脑的结构和功能并不是固定不变的,通过刻意的练习,便刻意改变我们大脑的运作方式。 1、要改变大脑适应能力,首先我们需要先走出舒适区。走出舒适区,切忌走得太多,在距离舒适区不远的“甜蜜点”上停留,才能够长期的走在舒适区外围。......
  • 2023年12月5日总结
    更好的观看总结今天是数学专题啊,内容还有一点多。勇敢牛牛,不怕困难!虽然看着有点恐怖,但是看着还好。不定方程这个知识点比较简单,上一道例题。[HNOI2002]跳蚤想一下突然发现这道题很反演呢?那就归到后面一类吧嘻嘻。就是要求\(n\)个数gcd为1的数量用\(f_m\)表示,另外设......
  • 2023-12月面经
    Funplus-宝可梦大世界项目项目经历有点硬核,对着简历一条条问的,每条都要问个细节。状态机与行为树的对比,优缺点之类的checklua与C#的交互(tolua怎么调用C#,以及C#怎么调用lua函数)核心就是lua和C#之间有个虚拟栈,lua调用C#就把参数压入栈,然后C#从栈里取值,运行完函数逻辑后,如果有......