基本介绍

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

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

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

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

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

案例分析

public class Demeter1 {

public static void main(String[] args) {

SchoolManager schoolManager = new SchoolManager();

schoolManager.printAllEmployee(new CollegeManage());

}

}

//总部员工的类

class Employee {

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

//学院员工的类

class CollegeEmployee {

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

//管理学院员工的类

class CollegeManage {

// 返回学院的所有员工

public List getAllEmployee() {

List list = new ArrayList();

for (int i = 0; i < 10; i++) {

CollegeEmployee emp = new CollegeEmployee();

emp.setId("学院员工id" + i);

list.add(emp);

}

return list;

}

// 输出学院员工的信息

public void printEmployee() {

// 获取学院员工

List list1 = this.getAllEmployee();

System.out.println("------学院员工------");

for (CollegeEmployee e : list1) {

System.out.println(e.getId());

}

}

}

//管理学校员工的类

class SchoolManager {

// 返回学校总部的所有员工

public List getAllEmployee() {

List list = new ArrayList();

for (int i = 0; i < 5; i++) {

Employee emp = new Employee();

emp.setId("学校总部员工" + i);

list.add(emp);

}

return list;

}

void printAllEmployee(CollegeManage sub) {

/*

* 分析问题 1.这里的CollegeEmployee 不是 SchoolManager的直接朋友 2.CollegeEmployee

* 是以局部变量的方式出现在 SchoolManager 3.违反了迪米特法则

*/

/*

* 解决办法 1.将输出学院的员工方法,转到CollegeEmployee

*/

sub.printEmployee();

// 获取学校总部员工

List list2 = this.getAllEmployee();

System.out.println("------学校总部员工------");

for (Employee e : list2) {

System.out.println(e.getId());

}

}

}

上面的代码,CollegeEmployee 不是 SchoolManager的直接朋友,CollegeEmployee是以局部变量的方式出现在SchoolManager,所以违反了迪米特法则

改进代码

public class Demeter1 {

public static void main(String[] args) {

SchoolManager schoolManager = new SchoolManager();

schoolManager.printAllEmployee(new CollegeManage());

}

}

//总部员工的类

class Employee {

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

//学院员工的类

class CollegeEmployee {

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

//管理学院员工的类

class CollegeManage {

// 返回学院的所有员工

public List getAllEmployee() {

List list = new ArrayList();

for (int i = 0; i < 10; i++) {

CollegeEmployee emp = new CollegeEmployee();

emp.setId("学院员工id" + i);

list.add(emp);

}

return list;

}

}

//管理学校员工的类

class SchoolManager {

// 返回学校总部的所有员工

public List getAllEmployee() {

List list = new ArrayList();

for (int i = 0; i < 5; i++) {

Employee emp = new Employee();

emp.setId("学校总部员工" + i);

list.add(emp);

}

return list;

}

void printAllEmployee(CollegeManage sub) {

// 获取学院员工

List list1 = sub.getAllEmployee();

System.out.println("------学院员工------");

for (CollegeEmployee e : list1) {

System.out.println(e.getId());

}

// 获取学校总部员工

List list2 = this.getAllEmployee();

System.out.println("------学校总部员工------");

for (Employee e : list2) {

System.out.println(e.getId());

}

}

}

迪米特法则应注意的事项和细节

1、迪米特法则的核心是降低类之间的耦合

2、由于每个类都减少了不必要的依赖,因此迪米特法则知识要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系

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

  1. 设计模式 迪米特法则

    设计模式 迪米特法则 只和朋友交流 Only talk to your immediate friends 只与直接的朋友通信.即每个对象都有耦合关系,对象之间有耦合. 定义老师类 public cl ...

  2. [设计模式]迪米特法则

    迪米特法则 又叫最少知识法则 类中的成员属性和成员方法,如果不需要对外暴露,就不要设成public. 代码如下: #include <iostream> #include <stri ...

  3. Java设计模式-迪米特法则

    迪米特法则 [Low Of Demeter]   定义:一个对象应该对其他对象保持最少的了解.   问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大.   解决 ...

  4. 报童、钱包和迪米特法则(设计模式迪米特原则经典论文翻译)

    写在文章前: 或许你写过无数代码,参与过很多大型系统的设计,但,你是否曾经思考过,你的设计可扩展.易维护么,在高速变化的互联网世界里,它能经得起这种急速变化的考验么?如果你没想过这些问题,那请先放下你 ...

  5. 浅谈设计模式-迪米特法则

    书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 迪米特法则(Law of Demeter,LoD)的定义有点意思,有2种表述 1> 最少知道原则,指一个对象应当对其他 ...

  6. java 迪米特法则_Java设计模式之迪米特法则

    迪米特法则是在一个叫做迪米特的项目中提出来的,它要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则. 迪米特法则的意义是降低类之间的耦合,由于每个对象应该尽量减少对其他对象的了解 ...

  7. 23种设计模式-迪米特法则

    概念: 1) 一个对象应该对其他对象保持最少的了解 2) 类与类关系越密切,耦合度越大 3) 迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的 越少越好. ...

  8. java 迪米特_Java设计原则—迪米特法则(转)

    定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对 ...

  9. 迪米特法则模式:迪米特法的则通俗理解

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本.这六条分别是开闭原则.里氏代换原则 ...

最新文章

  1. SQL入门经典(第5版)学习笔记(三)
  2. java异常体系结构详解
  3. pytorch 单机多卡训练distributedDataParallel
  4. AD属性修改 office 365 delivery management 设定
  5. java中 flush()方法
  6. 同时两个版本php,查看“实现多个PHP版本共存和互相切换”的源代码
  7. eclipse中js中文乱码问题的解决办法
  8. svm多分类python代码_SVM算法的理解及其Python实现多分类和二分类
  9. 解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题
  10. [转帖] 一个老乞丐的一句话,震惊全中国人!
  11. sqlite stmt
  12. 解决DLL load failed while importing _imaging: 找不到指定的模块。问题
  13. 视频教程-HTML+CSS+JavaScript基础-HTML5/CSS
  14. 微信公众号:weixin-js-sdk使用总结
  15. 解决Destroying ProtocolHandler [“ajp-apr-8009“]
  16. Window10系统下触摸板失灵了 该咋处理
  17. Arduino与FreeRTOS-守护任务(Gatekeeper Task)
  18. LOL自动走A和释放技能原理及安全防护
  19. 计算机财务管理知识点,财务管理知识点梳理(财务基础必背知识点整理篇)
  20. 阿里云Kuberneters微服务部署案例

热门文章

  1. Scala中心基金会成立
  2. 动态行和列的表格,展现方式
  3. JQuery表单验证插件EasyValidator,超级简单易用!
  4. MapReduce英语面试
  5. Ubuntu 11.04上搭建Android开发环境
  6. 一致性代码段和非一致性代码段
  7. java集合框架类源代码阅读体会
  8. 计算机底层书籍三件套--大话计算机
  9. 暗杀TIME-WAIT
  10. 共用体和枚举,写写意思下