• Java学习 --- 设计模式的七大原则的迪米特法则(最小知道原则)


    目录

    一、迪米特法则

    二、迪米特法则的注意事项


    一、迪米特法则

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

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

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

    4、迪米特法则定义:只与直接朋友通信。

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

    违反迪米特法则的示例代码:

    1. public class Demeter {
    2. public static void main(String[] args) {
    3. SchoolManger schoolManger = new SchoolManger();
    4. schoolManger.printAllEmployee(new CollegeManger() );
    5. }
    6. }
    7. //学校总部员工
    8. class Employee{
    9. private String id;
    10. public void setId(String id){
    11. this.id = id;
    12. }
    13. public String getId(){
    14. return id;
    15. }
    16. }
    17. //学院员工类
    18. class CollegeEmployee{
    19. private String id;
    20. public String getId() {
    21. return id;
    22. }
    23. public void setId(String id) {
    24. this.id = id;
    25. }
    26. }
    27. //管理学院员工的管理类
    28. class CollegeManger{
    29. //返回学院的所有员工
    30. public List getAllEmployee(){
    31. ArrayList collegeEmployeeArrayList = new ArrayList<>();
    32. for (int i = 0; i <10 ; i++) {
    33. CollegeEmployee collegeEmployee = new CollegeEmployee();
    34. collegeEmployee.setId("学院员工的id="+i); //添加学院员工
    35. collegeEmployeeArrayList.add(collegeEmployee);
    36. }
    37. return collegeEmployeeArrayList;
    38. }
    39. }
    40. //学校管理类
    41. //SchoolManger类的直接朋友类有:Employee,CollegeManger
    42. class SchoolManger {
    43. //返回学校总部的员工
    44. public List getAllEmployee(){
    45. ArrayList employeeArrayList = new ArrayList<>();
    46. for (int i = 0; i <5 ; i++) {
    47. Employee employee = new Employee();
    48. employee.setId("学校总部的员工id=" + i);
    49. employeeArrayList.add(employee);
    50. }
    51. return employeeArrayList;
    52. }
    53. //输出学校总部和学院员工信息
    54. public void printAllEmployee(CollegeManger collegeManger){
    55. //获取到学院员工
    56. /**
    57. * 1、CollegeEmployee不是SchoolManger直接朋友
    58. * 2、CollegeEmployee是以局部变量的方式出现在SchoolManger
    59. * 3、违反了迪米特法则
    60. */
    61. List allEmployee = collegeManger.getAllEmployee();
    62. System.out.println("--------学院员工--------");
    63. for (CollegeEmployee employee: allEmployee) {
    64. System.out.println(employee.getId());
    65. }
    66. //获取到学校总部员工
    67. List allEmployee1 = this.getAllEmployee();
    68. System.out.println("--------学院总部员工--------");
    69. for (Employee employee1: allEmployee1) {
    70. System.out.println(employee1.getId());
    71. }
    72. }
    73. }

    使用迪米特法则的示例代码:

    1. public class Demeter {
    2. public static void main(String[] args) {
    3. SchoolManger schoolManger = new SchoolManger();
    4. schoolManger.printAllEmployee(new CollegeManger() );
    5. }
    6. }
    7. //学校总部员工
    8. class Employee{
    9. private String id;
    10. public void setId(String id){
    11. this.id = id;
    12. }
    13. public String getId(){
    14. return id;
    15. }
    16. }
    17. //学院员工类
    18. class CollegeEmployee{
    19. private String id;
    20. public String getId() {
    21. return id;
    22. }
    23. public void setId(String id) {
    24. this.id = id;
    25. }
    26. }
    27. //管理学院员工的管理类
    28. class CollegeManger{
    29. //返回学院的所有员工
    30. public List getAllEmployee(){
    31. ArrayList collegeEmployeeArrayList = new ArrayList<>();
    32. for (int i = 0; i <10 ; i++) {
    33. CollegeEmployee collegeEmployee = new CollegeEmployee();
    34. collegeEmployee.setId("学院员工的id="+i); //添加学院员工
    35. collegeEmployeeArrayList.add(collegeEmployee);
    36. }
    37. return collegeEmployeeArrayList;
    38. }
    39. //输出学院员工信息
    40. public void printEmployee(){
    41. List allEmployee = getAllEmployee();
    42. System.out.println("--------学院员工--------");
    43. for (CollegeEmployee employee: allEmployee) {
    44. System.out.println(employee.getId());
    45. }
    46. }
    47. }
    48. //学校管理类
    49. //SchoolManger类的直接朋友类有:Employee,CollegeManger
    50. class SchoolManger {
    51. //返回学校总部的员工
    52. public List getAllEmployee(){
    53. ArrayList employeeArrayList = new ArrayList<>();
    54. for (int i = 0; i <5 ; i++) {
    55. Employee employee = new Employee();
    56. employee.setId("学校总部的员工id=" + i);
    57. employeeArrayList.add(employee);
    58. }
    59. return employeeArrayList;
    60. }
    61. //输出学校总部和学院员工信息
    62. public void printAllEmployee(CollegeManger collegeManger){
    63. //获取到学院员工
    64. collegeManger.printEmployee();
    65. //获取到学校总部员工
    66. List allEmployee1 = this.getAllEmployee();
    67. System.out.println("--------学院总部员工--------");
    68. for (Employee employee1: allEmployee1) {
    69. System.out.println(employee1.getId());
    70. }
    71. }
    72. }

    二、迪米特法则的注意事项

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

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

  • 相关阅读:
    Flutter - APP主界面Tabbar保持页面状态
    如何使用ArcGIS去除卫星影像上的云
    VE就是经营本身——日立建机
    java通过jol-core库分析对象内存分布以及查看Synchronized锁升级过程
    信号系统之连续信号处理
    Gateway 简介
    浅谈东数西算战略中,发挥算网大脑作用的4个关键点
    Swift 5.9 与 SwiftUI 5.0 中新 Observation 框架应用之深入浅出
    centos 6.10 安装 perl 5.14
    695.最大岛屿面积
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/126031671