您当前的位置: 首页 > 

喜欢猪猪

暂无认证

  • 3浏览

    0关注

    228博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

设计模式六大原则5---》迪米特法则

喜欢猪猪 发布时间:2018-06-07 16:33:33 ,浏览量:3

定义:一个对象应该对其他对象保持最少的了解。
问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

解决方案:尽量降低类与类之间的耦合。
自从我们接触编程开始,就知道了软件编程的总原则,低耦合,高内聚。无论是面向对象编程还是面向过程编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复合率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合昵?

迪米特法则又称为最少知道法则,最早是在1987年美国Northeastern University的lan Holland提出的。通俗来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄露任何信息。迪米特法则还有一个更简单的定义:只与直接的朋友通信。首先来解释一下什么是直接的朋友;每隔对象都会与其它对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
举一个例子:有一个学校类,班级类和学生类,现在要求打印出班级下面 所有的学生信息,先来看一下反迪米特反正的设计。

public class Student
{

    public int Id{get;set;}
    public string StudentName{get;set;}
}

public class Class{
    public int Id{get;se;}
    public int  ClassName{get;set;}
    public List StudentList{get;set;}
    public void Print()
   {
        foreach(Student s in this.StudentList)
        {
              Console.WriteLine{"{0}Manage{1}",s.GetType().Name,s.StudentName};
        }
    }
}
public class School{
    public int Id{get;set;}
    public string SchoolName{get;set;}
    public List ClassList{get;set;}
    public void Print(){

              foreach(Class c in this.ClassList){

                   Console.WriteLine("Manage{0},this.GetType().Name");
                   c.Print();
                      // List studentList = c.StudentList;                // foreach (Student s in studentList)                // {                //     Console.WriteLine(" {0}Manage {1} ", s.GetType().Name, s.StudentName);                // }

             }    
      
}
}

注意点:调用班级打印学生名称的方法,避免使用学校类直接来打印学生名称,从而避免了与班级的学生发生耦合。每个类只对与之关联的类进行建立关系,不要跨类进行调用,降低耦合。使程序更加的灵活,复用;

迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系.但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个"中介"来发生联系.

关注
打赏
1648795721
查看更多评论
立即登录/注册

微信扫码登录

0.0482s