溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中迪米特法則是什么

發(fā)布時間:2022-02-09 09:59:45 來源:億速云 閱讀:101 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Java中迪米特法則是什么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    定義

    迪米特法則(Law of Demeter, LoD)是1987年秋天由lan holland在美國東北大學(xué)一個叫做迪米特的項 目設(shè)計提 出的,它要求一個對象應(yīng)該對其他對象有最少的了解,所以迪米特法則又叫做最少知識原則。

    案例

    需求

    有一個公司,下屬有各個部門,現(xiàn)要求打印出公司員工的ID和部門員工的ID

    方案一

    定義公司員工類

    /**
     * 公司員工
     * @author:liyajie
     * @createTime:2022/2/8 11:52
     * @version:1.0
     */
    @Data
    public class CompanyEmployee {
        private String id;
    }

    定義公司管理類

    /**
     * 公司員工管理員
     * @author:liyajie
     * @createTime:2022/2/8 11:51
     * @version:1.0
     */
    public class CompanyManager {
    
        public List<CompanyEmployee> getCompanyEmployee(){
            List<CompanyEmployee> list = new ArrayList<CompanyEmployee>();
            for (int i = 0; i < 5; i++) {
                CompanyEmployee companyEmployee = new CompanyEmployee();
                companyEmployee.setId("公司員工,id是" + i);
                list.add(companyEmployee);
            }
            return list;
        }
    }

    定義部門員工類

    /**
     * 部門員工
     * @author:liyajie
     * @createTime:2022/2/8 11:53
     * @version:1.0
     */
    @Data
    public class DempartEmployee {
        private String id;
    }

    定義部門管理類

    /**
     * 部門員工管理員
     * @author:liyajie
     * @createTime:2022/2/8 11:52
     * @version:1.0
     */
    public class DepartmentManager {
    
        /**
         * 獲取部門員工信息
         * @author: liyajie
         * @date: 2022/2/8 12:29
         * @param
         * @return java.util.List<com.lyj.mode.principle.demeter.DempartEmployee>
         * @exception:
         * @update:
         * @updatePerson:
         **/
        public List<DempartEmployee> getDempartEmployee(){
            List<DempartEmployee> list = new ArrayList<DempartEmployee>();
            for (int i = 0; i < 5; i++) {
                DempartEmployee dempartEmployee = new DempartEmployee();
                dempartEmployee.setId("部門員工,id是" + i);
                list.add(dempartEmployee);
            }
            return list;
        }
    
        public void pringAllEmployee(CompanyManager companyManager){
            List<DempartEmployee> dempartEmployeeList = getDempartEmployee();
            for (DempartEmployee dempartEmployee : dempartEmployeeList) {
                System.out.println(dempartEmployee.getId());
            }
            System.out.println("--------------------------------");
            List<CompanyEmployee> companyEmployeeList = companyManager.getCompanyEmployee();
            for (CompanyEmployee companyEmployee : companyEmployeeList) {
                System.out.println(companyEmployee.getId());
            }
        }
    
    }

    定義測試類

    /**
     * 測試類
     * @author:liyajie
     * @createTime:2022/2/8 11:53
     * @version:1.0
     */
    public class Test1 {
        public static void main(String[] args) {
            new DepartmentManager().pringAllEmployee(new CompanyManager());
        }
    }

    查看結(jié)果

    Java中迪米特法則是什么

    方案二

    該方案與方案一的區(qū)別只有兩個地方,具體如下: 修改后的公司管理類,新增打印公司員工id的方法

    /**
     * 公司員工管理員
     * @author:liyajie
     * @createTime:2022/2/8 11:51
     * @version:1.0
     */
    public class CompanyManagerNew {
    
        /**
         * 查詢公司員工
         * @author: liyajie
         * @date: 2022/2/8 12:42
         * @param
         * @return java.util.List<com.lyj.mode.principle.demeter.CompanyEmployee>
         * @exception:
         * @update:
         * @updatePerson:
         **/
        public List<CompanyEmployee> getCompanyEmployee(){
            List<CompanyEmployee> list = new ArrayList<CompanyEmployee>();
            for (int i = 0; i < 5; i++) {
                CompanyEmployee companyEmployee = new CompanyEmployee();
                companyEmployee.setId("公司員工,id是" + i);
                list.add(companyEmployee);
            }
            return list;
        }
    
        /**
         * 打印公司員工id
         * @author: liyajie
         * @date: 2022/2/8 12:41
         * @param
         * @return void
         * @exception:
         * @update:
         * @updatePerson:
         **/
        public void printCompanyEmployee(){
            List<CompanyEmployee> list = getCompanyEmployee();
            for (CompanyEmployee companyEmployee: list) {
                System.out.println(companyEmployee.getId());
            }
        }
    }

    修改后的部門管理類

    /**
     * 部門員工管理員
     * @author:liyajie
     * @createTime:2022/2/8 11:52
     * @version:1.0
     */
    public class DepartmentManagerNew {
    
        /**
         * 獲取部門員工信息
         * @author: liyajie
         * @date: 2022/2/8 12:29
         * @param
         * @return java.util.List<com.lyj.mode.principle.demeter.DempartEmployee>
         * @exception:
         * @update:
         * @updatePerson:
         **/
        public List<DempartEmployee> getDempartEmployee(){
            List<DempartEmployee> list = new ArrayList<DempartEmployee>();
            for (int i = 0; i < 5; i++) {
                DempartEmployee dempartEmployee = new DempartEmployee();
                dempartEmployee.setId("部門員工,id是" + i);
                list.add(dempartEmployee);
            }
            return list;
        }
    
        public void pringAllEmployee(CompanyManagerNew companyManagerNew){
            List<DempartEmployee> dempartEmployeeList = getDempartEmployee();
            for (DempartEmployee dempartEmployee : dempartEmployeeList) {
                System.out.println(dempartEmployee.getId());
            }
            System.out.println("--------------------------------");
            companyManagerNew.printCompanyEmployee();
        }
    
    }

    測試類

    /**
     * 測試類
     * @author:liyajie
     * @createTime:2022/2/8 11:53
     * @version:1.0
     */
    public class Test2 {
        public static void main(String[] args) {
            new DepartmentManagerNew().pringAllEmployee(new CompanyManagerNew());
        }
    }

    結(jié)果

    Java中迪米特法則是什么

    對比分析

    方案一,在部門管理類DepartmentManager的方法pringAllEmployee中打印了公司員工id,使用到了類CompanyEmployee,該類既不是DepartmentManager的內(nèi)部屬性,也不是方法的入?yún)⒑头祷貐?shù),違反了迪米特原則

    Java中迪米特法則是什么

    方案二,在公司管理類中新增打印公司員工id的方法,并對外提供,在部門管理類DepartmentManager的方法pringAllEmployee中進(jìn)行了調(diào)用,符合迪米特原則

    Java中迪米特法則是什么

    感謝各位的閱讀!關(guān)于“Java中迪米特法則是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI