概念:

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

2) 类与类关系越密切,耦合度越大

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

4) 迪米特法则还有个更简单的定义:只与直接的朋友通信

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

理解:

1、A和B两个类,如果A调用B类的方法,那么B的方法只需要在B类中完成,直接给A返回结果即可,A类无须知道里面执行的过程,并且A类不负责B类的数据操作。

2、陌生的类不最好不要已局部变量的形式出现在类的内部。也就是说,A类使用B类,尽量在A类方法内new这个实例,应该使用传递的方式来解决。但是例如工具类,那么只能做局部变量的调用,所以迪米特法则是说好不要以局部变量的形式出现在类的内部。

实例:

以上代码在B类中的方法内,出现了A类的成员变量,那么这样是违背了迪米特法则的,所以我们要将他改进

改进:

只需要将成员变量改成传递的类型即可。

小结:

1、迪米特法则是最少知道原则,只需要提供public方法即可,不需要透漏其他信息

2、不要将不属于自己类的方法写在自己的类中处理

3、尽量不要在类的局部变量出现其他new的类,因为不属于直接朋友,如果要使用其他类,则选择类的依赖,关联,组合,聚合等

23种设计模式-迪米特法则相关推荐

  1. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  2. 【设计模式】Java 23种设计模式对比总结

    一.设计模式的分类 创建型模式,共五种(1-5):工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种(6-12):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  3. 【java】java开发中的23种设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. 23种设计模式介绍(一)---- 创建型模式

    由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模 ...

  5. java 23种设计模式(转载)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. 软件开发除了23种设计模式,还有7个开发原则需要了解

    摘要:使用设计模式能够使我们开发的程序,易维护.可拓展,可复用.但是在23个设计模式的背后,还有7个开发原则去支撑着设计模式,保证23个设计模式能够易维护.可拓展,可复用.所以这篇文章来解开七大设计原 ...

  7. C# 23种设计模式

    目录 0).简单工厂模式 1).工厂方法模式 2).抽象工厂模式 3).单例模式 4).构建者模式 5).原型模式 6).适配器模式 7).修饰者模式 8).代理模式 9).外观模式 10).桥接模式 ...

  8. Java的7大设计原则和23种设计模式

    目录 一.UML类图 二. 设计原则 1.单一职责原则 2.里氏替换原则 3.依赖倒置原则 4.接口隔离原则 5.迪米特法则-最少知道原则 6.开闭原则 7.组合/聚合复用原则 三.Java中的23 ...

  9. 设计模式——23种设计模式学习总结

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改. 系列文章目录 简单工厂模式 策略模式模式 装饰模式(进行中) 代理模式(进行中) 工厂方法模式 ...

最新文章

  1. html如何控制弹窗位置,控制弹窗展示顺序
  2. python/numpy将矩阵保存为文本文件
  3. 概率编程编程_概率编程语言的温和介绍
  4. 【转】 ConstraintLayout 完全解析 快来优化你的布局吧
  5. Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射
  6. 【渝粤教育】国家开放大学2019年春季 1398分析化学(本) 参考试题
  7. 计算机组成原理中ID是什么,计算机组成原理.doc
  8. 什么是立即执行函数,有什么作用?
  9. ecshop php7 mysql_ecshop如何修改并支持PHP7
  10. Stata: 图示交互效应\调节效应
  11. 电脑计算机安全模式在哪,电脑怎么进入安全模式? 进入安全模式详细教程
  12. 【Linux】数字ICer需要用到哪些Linux命令?
  13. python word转pdf linux_Linux下使用LibreOffice+python将doc/docx/wps格式的文档转成html/txt/docx等格式...
  14. 老周的ABP框架系列教程
  15. 利用网络,下载网络资源
  16. ImageEdit 展示图片(XAML, C#)
  17. mysql报错3009_MySQL修改密码方法汇总
  18. Mac Outlook左侧文件夹不见了,怎么处理?
  19. 基于PreSCAN Matlab/Simulink的智能驾驶联合仿真【详细图文】
  20. 紫光展锐全面出击,力争在5G时代成为全球领军芯片企业

热门文章

  1. win7文件名不能使用哪些符号
  2. skimage.morphology.dilation 运行错误
  3. 我的签名--发问之前
  4. 论文写作word中怎么把所有数字和字母替换为times new roman
  5. java Process.waitFor阻塞
  6. 执行Sqlserver中waitfor delay延时操作或waitfor time定时操作
  7. deepin linux 安装SQL Server 2017 for linux
  8. 如何赢在混合云与计算时代?解读英特尔再度回归芯“智”向
  9. 淘宝的接口delphi
  10. VCS视频学习中的一个例子代码:dff.v和dff_tb.v