定义:一个对象应该对其他对象保持最少的了解。
问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
解决方案:尽量降低类与类之间的耦合。
自从我们接触编程开始,就知道了软件编程的总原则,低耦合,高内聚。无论是面向对象编程还是面向过程编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复合率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合昵?
迪米特法则又称为最少知道法则,最早是在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<Student> 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<Class> ClassList{get;set;}
public void Print(){

foreach(Class c in this.ClassList){

Console.WriteLine("Manage{0},this.GetType().Name");
c.Print();

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

}    
}
}

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

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

设计模式六大原则5---》迪米特法则相关推荐

  1. python设计模式六大原则_学习设计模式 - 六大基本原则之迪米特法则(示例代码)...

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  2. 设计模式:设计模式七大原则之迪米特法则

    迪米特法则的核心是降低类之间的耦合 , 最少知道原则 import java.util.ArrayList; import java.util.List;public class Demeter1 { ...

  3. 六大原则之迪米特法则

    定义: 迪米特法则又叫最少知识原则,意思是"一个对象应当对其他对象尽可能的少了解. 注意: 1.在类的划分上,应该创建弱耦合的类.类与类之间的耦合越弱,就越有利于实现可复用的目标. 2.在类 ...

  4. android之设计模式六大原则

    设计模式面向对象软件设计开发模式 目录(?)[-] 设计模式六大原则1单一职责原则 设计模式六大原则2里氏替换原则 设计模式六大原则3依赖倒置原则 设计模式六大原则4接口隔离原则 设计模式六大原则5迪 ...

  5. 设计模式原则之迪米特法则

    设计模式原则之迪米特法则 迪米特法则(Law of Demeter, LoD)的核心是一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就 ...

  6. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...

  7. Java 设计模式六大原则

    Java 设计模式六大原则 单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而 ...

  8. 快速理解设计模式六大原则

    设计模式的核心总结起来就一句话:用抽象构建框架,用实现扩展细节.目的就是代码修改的改动量最小 设计模式六大原则 单一职责原则 很好理解,一个类职责要单一,不要承载过多的职责,就比如说我们电脑上所有的文 ...

  9. 子慕谈设计模式系列(二)——设计模式六大原则

    六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 前言 设计模式不容易用文字描述清楚,而过多的代码,看起来也让人摸不到头脑,加上词语或者文字描述的抽象感,很容易让 ...

最新文章

  1. ReSIProcate源码目录下功能说明
  2. UML中符号的意义(转)
  3. 学会python编程容易吗-Python编程入门难不难
  4. Linux的DNS配置2-主从服务器
  5. 史上最全的Chrome使用技巧集锦
  6. C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)
  7. java 日期只计算年月日大小_Java 计算两个日期相差多少年月日
  8. java泛型特点_java泛型简单总结
  9. oracle v$sysstat性能视图
  10. vue 下配置标题栏 title 图标及文字的具体步骤
  11. 微信小程序下拉刷新不回弹
  12. 嵌入式芯片调试神器-J-Link RTT详解
  13. 注册表禁用计算机管理,解除封锁注册表被禁用的几种解决办法
  14. 链塔智库联合清华发布《2018区块链技术应用白皮书》
  15. VC助手 Visual Assist 6.0的安装与简介
  16. eclipse 工作空间的高效使用
  17. 为什么t检验要满足正态?
  18. STM32F4时钟树
  19. 思科firepower数据流处理流程
  20. 练手卦,奖金何时发?

热门文章

  1. c语言编写printf函数,C语言之printf函数详解
  2. 玩游戏的你知道早期的貂蝉建模图有多好看吗
  3. linux 下GPRS模块使用sim900打电话发短信
  4. python程序执行提示音——python播放MP3文件
  5. Python json序列化
  6. 轻松解决:无法更新app,因为此项目已退款或通过其他id购买
  7. Thrift使用指南及语法介绍
  8. linux+设置ipv6网关,RedhatCentOS下IPv6地址和默认网关设置
  9. C#读取钉钉打卡记录(四)——获取员工信息
  10. JS的几种关键词的查找方法