在代码编写的过程当中应该尽量的保持是使用迪米特法则来进行对象的处理操作
原则:
-
一个对象应该和其他的对象尽量的保持最少的了解
-
类与类的关系越密切,耦合度就越高
-
迪米特法则又叫做最少知道原则,即一个类对自己依赖的类应该知道的越少越好,也就是说不管被依赖的类有多么复杂,都应该尽量的将其封装在类的内部,除了提供一个public的方法之外,不对外泄露任何的信息。
-
只与直接朋友进行通信
-
直接朋友: 只要两个对象之间含有耦合关系,那就说明这两个对象是存在着朋友关系。耦合的方式有很多种:聚合,组合,依赖,继承等等...但是直接朋友的话是存在类当中的成员变量,参数,方法的返回值中的任何一种都是可以的。,而出现在局部变量当中的不是直接朋友,而是属于陌生的朋友,我们要尽量的避免使用陌生朋友。
不符合迪米特法则的情况:
package com.yt.demeterPrinciple.basis;
import java.util.ArrayList;
import java.util.List;
/**
* @program: designPattern
* @description
* @author: YangTao
* @create: 2024-02-27 20:54
**/
public class DemeterPrincipleTest {
public static void main(String[] args) {
SchoolManager schoolManager = new SchoolManager();
schoolManager.printAllEmployee(new CollegeManager());
}
}
class Employee{
private int id;
public Employee() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class CollegeManager{
//直接返回一个学院的员工
public List<Employee> getCollegeEmployee(){
ArrayList<Employee> CollegeEmployees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i);
CollegeEmployees.add(employee);
}
return CollegeEmployees;
}
}
class SchoolManager{
//直接返回一个学校的员工
public List<Employee> getSchoolEmployee(){
ArrayList<Employee> SchoolEmployees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i);
SchoolEmployees.add(employee);
}
return SchoolEmployees;
}
//直接打印出来学校的员工和学院的员工
public void printAllEmployee(CollegeManager collegeManager){
//这里形成的collegeEmployee是属于陌生的朋友就这个类而言
//不能直接使用到本类当中来的,而是要直接应用到原来属于的类当中的。
//不符合迪米特法则
System.out.println("---------学院的情况-----------");
List<Employee> collegeEmployee = collegeManager.getCollegeEmployee();
for (Employee employee : collegeEmployee){
System.out.println("学院的员工编号:" + employee.getId());
}
System.out.println("---------学校的情况-----------");
List<Employee> schoolEmployee = getSchoolEmployee();
for (Employee employee : schoolEmployee){
System.out.println("学校的员工编号:" + employee.getId());
}
}
}
将其进行修改之后,使其具有迪米特法则的情况:
package com.yt.demeterPrinciple.basis;
import java.util.ArrayList;
import java.util.List;
/**
* @program: designPattern
* @description
* @author: YangTao
* @create: 2024-02-27 20:54
**/
public class DemeterPrincipleTest {
public static void main(String[] args) {
SchoolManager schoolManager = new SchoolManager();
schoolManager.printAllEmployee(new CollegeManager());
}
}
class Employee{
private int id;
public Employee() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class CollegeManager{
//直接返回一个学院的员工
public List<Employee> getCollegeEmployee(){
ArrayList<Employee> CollegeEmployees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i);
CollegeEmployees.add(employee);
}
return CollegeEmployees;
}
public void printCollageEmployee(){
System.out.println("---------学院的情况-----------");
List<Employee> collegeEmployee = this.getCollegeEmployee();
for (Employee employee : collegeEmployee){
System.out.println("学院的员工编号:" + employee.getId());
}
}
}
class SchoolManager{
//直接返回一个学校的员工
public List<Employee> getSchoolEmployee(){
ArrayList<Employee> SchoolEmployees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i);
SchoolEmployees.add(employee);
}
return SchoolEmployees;
}
//直接打印出来学校的员工和学院的员工
public void printAllEmployee(CollegeManager collegeManager){
//这里形成的collegeEmployee是属于陌生的朋友就这个类而言
//不能直接使用到本类当中来的,而是要直接应用到原来属于的类当中的。
//修改形成含有迪米特法则的情况
collegeManager.printCollageEmployee();
System.out.println("---------学校的情况-----------");
List<Employee> schoolEmployee = getSchoolEmployee();
for (Employee employee : schoolEmployee){
System.out.println("学校的员工编号:" + employee.getId());
}
}
}