网站首页 > java教程 正文
迪米特法则(Demeter Principle)<最少知道原则>:
1、一个对象应该对其他对象保持最少的了解;
2、类与类关系越密切,耦合度越大;
3、迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好,也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部;对外除了提供的public方法,不对外泄露任何信息;
4、迪米特法则还有个更简单的定义:只与直接的朋友通信;
5、直接的朋友,每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,就说这两个对象之间是朋友关系;耦合的方式很多,依赖、关联、组合、聚合等;其中,出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现局部变量中的类不是直接的朋友;也就是说,陌生类最好不要以局部变量的形式出现在类的内部;
6、迪米特法则的核心是降低类与类之间的耦合。
代码案例:
设计1(不遵守迪米特法则<最少知道原则>):
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
CompanyManager companyManager = new CompanyManager();
companyManager.printAllEmployee(new BranchManager());
// 问题:printAllEmployee()方法,没有遵守迪米特法则(最少知道原则)
// 需要改进
}
}
//公司员工
class CompanyEmployee {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
//分公司员工
class BranchEmployee {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
class BranchManager {
// 返回==>分公司的员工
public List<BranchEmployee> getAllEmployee() {
List<BranchEmployee> beanList = new ArrayList<BranchEmployee>();
for (int i = 0; i < 10; i++) {
BranchEmployee branchEmployee = new BranchEmployee();
branchEmployee.setId("分公司,员工ID=" + i + "");
beanList.add(branchEmployee);
}
return beanList;
}
}
class CompanyManager {
// 返回==>总公司的员工
public List<CompanyEmployee> getAllEmployee() {
List<CompanyEmployee> beanList = new ArrayList<CompanyEmployee>();
for (int i = 0; i < 5; i++) {
CompanyEmployee companyEmployee = new CompanyEmployee();
companyEmployee.setId("总公司,总部员工ID=" + i + "");
beanList.add(companyEmployee);
}
return beanList;
}
// 打印所有员工
public void printAllEmployee(BranchManager branchManager) {
// BranchEmployee为陌生类
List<BranchEmployee> branchEmployeeList = branchManager.getAllEmployee();
System.out.println("--------------------分公司员工--------------------");
for (BranchEmployee branchEmployee : branchEmployeeList) {
System.out.println(branchEmployee.getId());
}
System.out.println("--------------------总公司员工--------------------");
List<CompanyEmployee> companyEmployeeList = this.getAllEmployee();
for (CompanyEmployee companyEmployee : companyEmployeeList) {
System.out.println(companyEmployee.getId());
}
}
}
设计2(遵守了迪米特法则<最少知道原则>):
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
CompanyManager companyManager = new CompanyManager();
companyManager.printAllEmployee(new BranchManager());
// 遵守迪米特法则(最少知道原则)改进
}
}
//公司员工
class CompanyEmployee {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
//分公司员工
class BranchEmployee {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
class BranchManager {
// 返回==>分公司的员工
public List<BranchEmployee> getAllEmployee() {
List<BranchEmployee> beanList = new ArrayList<BranchEmployee>();
for (int i = 0; i < 10; i++) {
BranchEmployee branchEmployee = new BranchEmployee();
branchEmployee.setId("分公司,员工ID=" + i + "");
beanList.add(branchEmployee);
}
return beanList;
}
// 打印分公司的员工
public void printAllEmployee() {
List<BranchEmployee> branchEmployeeList = this.getAllEmployee();
System.out.println("--------------------分公司员工--------------------");
for (BranchEmployee branchEmployee : branchEmployeeList) {
System.out.println(branchEmployee.getId());
}
}
}
class CompanyManager {
// 返回==>总公司的员工
public List<CompanyEmployee> getAllEmployee() {
List<CompanyEmployee> beanList = new ArrayList<CompanyEmployee>();
for (int i = 0; i < 5; i++) {
CompanyEmployee companyEmployee = new CompanyEmployee();
companyEmployee.setId("总公司,总部员工ID=" + i + "");
beanList.add(companyEmployee);
}
return beanList;
}
// 打印所有员工
public void printAllEmployee(BranchManager branchManager) {
branchManager.printAllEmployee();
System.out.println("--------------------总公司员工--------------------");
List<CompanyEmployee> companyEmployeeList = this.getAllEmployee();
for (CompanyEmployee companyEmployee : companyEmployeeList) {
System.out.println(companyEmployee.getId());
}
}
}
- 上一篇: 趣谈 23 种设计模式(多图 + 代码)
- 下一篇: Spring框架中都用到了哪些设计模式?
猜你喜欢
- 2024-11-26 Java设计模式——命令模式
- 2024-11-26 23种java设计模式之:建造者模式、工厂方法模式、抽象工厂模式
- 2024-11-26 3张思维导图说清楚:java设计模式的6大设计原则,前3讲!
- 2024-11-26 面试官:常见的开源框架用了哪些设计模式?
- 2024-11-26 Java面试题之Spring 用了哪些设计模式?
- 2024-11-26 Java设计模式学习总结:组合模式
- 2024-11-26 别错过了!牛人大神开始讲解java和设计模式(行为模式)
- 2024-11-26 阿瑟Java (38):比较几种常见的设计模式
- 2024-11-26 Java设计模式:模板方法模式、命令模式与中介者模式
- 2024-11-26 软帝学院:Java设计模式的6大原则
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)