设计模式六大原则之迪米特法则讲解
小白浏览:4842022-09-06 21:48:41本文累计收益:0我也要赚钱
最近学习设计模式六大原则,简单记录一下学习内容,方便以后复习查阅,如有理解的不对请评论指正。设计模式可以简单理解为面向对象语言开发过程中,遇到各种场景和问题,解决方案和思路。设计模式六大原则为:单一职责原则、里氏替换原则、迪米特法则、依赖倒置原则、接口隔离原则、开闭原则。  
什么是迪米特原则?

迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息。

迪米特法则还有个更简单的定义:只与直接的朋友通信,不与间接朋友通信。

直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

一个对象应该对其他对象保持最少的了解。

实例代码讲解

本例用学校、班级、学生作为实例进行讲解,符合迪米特原则的思路学校可以管理班级、班级可以管理学生。但是一般来讲学校管理学生也是可以的,不过这样就违背了迪米特法则了。因为,可以这么理解学校跟班级是直接朋友,班级跟学生是直接朋友,学校跟学生就是间接朋友了。

代码如下:

学校类:
    public class School
    {
        public int Id { get; set; }
        public string SchoolName { get; set; }
        public List<Class> ClassList { get; set; }//直接朋友
        public void Manage() {
            Console.WriteLine($"Manage{this.GetType().Name}");
            foreach (Class c in this.ClassList) {
                Console.WriteLine($"{c.GetType().Name} Manage {c.ClassName}");
                c.Manage();//班级自己管理学生
                //违背迪米特法则
                List<Student> studentList = c.StudentList;//找到学生,学校管理
                foreach (Student student in studentList) {
                    Console.WriteLine($"{student.GetType().Name} Manage {student.StudentName}");
                }
            }
        }
    }
班级类:
    public class Class
    {
        public int Id { get; set; }
        public string ClassName { get; set; }
        public List<Student> StudentList { get; set; }
        public void Manage() {
            foreach (Student student in StudentList) {
                Console.WriteLine($"{student.GetType().Name} Manage {student.StudentName}");
            }
        }
    }
学生类:
    public class Student
    {
        public int Id { get; set; }
        public string StudentName { get; set; }
    }

 

评论列表
发表评论
+ 关注