迪米特原则

迪米特原则

迪米特法则的核心是为了降低类之间的耦合,即一个类对自己所依赖的类知道的越少越好(也称最少知道原则),要求被依赖的类尽量对外只提供public方法供依赖类来使用即可,不泄露任何的被依赖类的信息,从而实现高内聚,低耦合的效果。

迪米特法则的基本介绍:

在这里插入图片描述

下面直接给出未实现迪米特法则的案例实现迪米特法则的案例。

未实现迪米特法则的案例
package com.gaoliwei.demeter;

import java.util.ArrayList;
import java.util.List;

public class Demeter {
    public static void main(String[] args) {
        SchoolManager schoolManager = new SchoolManager();
        schoolManager.printAllEmployee(new CollegeManager());
    }
}


//学校总部员工类
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 CollegeManager{

    //返回学院的所有员工
    public List<CollegeEmployee> getAllEmployee (){
        List<CollegeEmployee> list = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++){
            CollegeEmployee collegeEmployee = new CollegeEmployee();
            collegeEmployee.setId("学校员工id = " + i);
            list.add(collegeEmployee);
        }
        return list;
    }

}

//学校管理类
//分析SchoolManager类的直接朋友类有哪些?    Employee、CollegeManager类
//不是直接朋友的类有哪些?  CollegeEmployee类
//这样就违背了迪米特法则
class SchoolManager{

    public List<Employee> getAllEmployee(){
        List<Employee> list = new ArrayList<Employee>();
        for (int i = 0; i < 5; i++){
            Employee employee = new Employee();
            employee.setId("学校总部员工:" + i);
            list.add(employee);
        }
        return list;
    }

    public void printAllEmployee(CollegeManager collegeManager){
        //分析问题
        // 1.这里的CollegeEmployee 不是 SchoolManager的直接朋友
        // 2.CollegeEmploy 是以局部变量方式出现在SchoolManager
        // 3.违反了 迪米特法则


        List<CollegeEmployee> list1 = collegeManager.getAllEmployee();
        System.out.println("-----学院员工-----");
        for (CollegeEmployee employee:list1){
            System.out.println(employee.getId());
        }

        List<Employee> list2 = this.getAllEmployee();
        System.out.println("-----学校总部员工-----");
        for (Employee employee: list2){
            System.out.println(employee.getId());
        }
    }
}

运行结果

-----学院员工-----
学校员工id = 0
学校员工id = 1
学校员工id = 2
学校员工id = 3
学校员工id = 4
学校员工id = 5
学校员工id = 6
学校员工id = 7
学校员工id = 8
学校员工id = 9
-----学校总部员工-----
学校总部员工:0
学校总部员工:1
学校总部员工:2
学校总部员工:3
学校总部员工:4
已实现迪米特法则的案例
package com.gaoliwei.demeter.improve;

import java.util.ArrayList;
import java.util.List;

public class Demeter {
    public static void main(String[] args) {
        System.out.println("~~~~~实现迪米特法则~~~~~");
        SchoolManager schoolManager = new SchoolManager();
        schoolManager.printAllEmployee(new CollegeManager());
    }
}


//学校总部员工类
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 CollegeManager{

    //返回学院的所有员工
    public List<CollegeEmployee> getAllEmployee (){
        List<CollegeEmployee> list = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++){
            CollegeEmployee collegeEmployee = new CollegeEmployee();
            collegeEmployee.setId("学校员工id = " + i);
            list.add(collegeEmployee);
        }
        return list;
    }


    //添加printAllEmployee方法,输出学院员工的所有信息
    public void printAllEmployee(){
        List<CollegeEmployee> list1 = this.getAllEmployee();
        System.out.println("-----学院员工-----");
        for (CollegeEmployee employee:list1){
            System.out.println(employee.getId());
        }
    }
}

//学校管理类
class SchoolManager{

    public List<Employee> getAllEmployee(){
        List<Employee> list = new ArrayList<Employee>();
        for (int i = 0; i < 5; i++){
            Employee employee = new Employee();
            employee.setId("学校总部员工:" + i);
            list.add(employee);
        }
        return list;
    }

    public void printAllEmployee(CollegeManager collegeManager){
        collegeManager.printAllEmployee();

        List<Employee> list2 = this.getAllEmployee();
        System.out.println("-----学校总部员工-----");
        for (Employee employee: list2){
            System.out.println(employee.getId());
        }
    }
}

运行结果

~~~~~实现迪米特法则~~~~~
-----学院员工-----
学校员工id = 0
学校员工id = 1
学校员工id = 2
学校员工id = 3
学校员工id = 4
学校员工id = 5
学校员工id = 6
学校员工id = 7
学校员工id = 8
学校员工id = 9
-----学校总部员工-----
学校总部员工:0
学校总部员工:1
学校总部员工:2
学校总部员工:3
学校总部员工:4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gaolw1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值