迪米特法则 java_java设计模式--迪米特法则
基本介绍
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设计模式--迪米特法则相关推荐
- 设计模式 迪米特法则
设计模式 迪米特法则 只和朋友交流 Only talk to your immediate friends 只与直接的朋友通信.即每个对象都有耦合关系,对象之间有耦合. 定义老师类 public cl ...
- [设计模式]迪米特法则
迪米特法则 又叫最少知识法则 类中的成员属性和成员方法,如果不需要对外暴露,就不要设成public. 代码如下: #include <iostream> #include <stri ...
- Java设计模式-迪米特法则
迪米特法则 [Low Of Demeter] 定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决 ...
- 报童、钱包和迪米特法则(设计模式迪米特原则经典论文翻译)
写在文章前: 或许你写过无数代码,参与过很多大型系统的设计,但,你是否曾经思考过,你的设计可扩展.易维护么,在高速变化的互联网世界里,它能经得起这种急速变化的考验么?如果你没想过这些问题,那请先放下你 ...
- 浅谈设计模式-迪米特法则
书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 迪米特法则(Law of Demeter,LoD)的定义有点意思,有2种表述 1> 最少知道原则,指一个对象应当对其他 ...
- java 迪米特法则_Java设计模式之迪米特法则
迪米特法则是在一个叫做迪米特的项目中提出来的,它要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则. 迪米特法则的意义是降低类之间的耦合,由于每个对象应该尽量减少对其他对象的了解 ...
- 23种设计模式-迪米特法则
概念: 1) 一个对象应该对其他对象保持最少的了解 2) 类与类关系越密切,耦合度越大 3) 迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的 越少越好. ...
- java 迪米特_Java设计原则—迪米特法则(转)
定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对 ...
- 迪米特法则模式:迪米特法的则通俗理解
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本.这六条分别是开闭原则.里氏代换原则 ...
最新文章
- SQL入门经典(第5版)学习笔记(三)
- java异常体系结构详解
- pytorch 单机多卡训练distributedDataParallel
- AD属性修改 office 365 delivery management 设定
- java中 flush()方法
- 同时两个版本php,查看“实现多个PHP版本共存和互相切换”的源代码
- eclipse中js中文乱码问题的解决办法
- svm多分类python代码_SVM算法的理解及其Python实现多分类和二分类
- 解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题
- [转帖] 一个老乞丐的一句话,震惊全中国人!
- sqlite stmt
- 解决DLL load failed while importing _imaging: 找不到指定的模块。问题
- 视频教程-HTML+CSS+JavaScript基础-HTML5/CSS
- 微信公众号:weixin-js-sdk使用总结
- 解决Destroying ProtocolHandler [“ajp-apr-8009“]
- Window10系统下触摸板失灵了 该咋处理
- Arduino与FreeRTOS-守护任务(Gatekeeper Task)
- LOL自动走A和释放技能原理及安全防护
- 计算机财务管理知识点,财务管理知识点梳理(财务基础必背知识点整理篇)
- 阿里云Kuberneters微服务部署案例