首页 > 作文

Java设计模式七大原则之迪米特法则详解

更新时间:2023-04-04 23:00:35 阅读: 评论:0

目录
定义案例需求方案一方案二对比分析总结

定义

迪米特法则(law of demeter, lod)是1987年秋天由lan holland在美国东北大学一个叫做迪米特的项 目设计提 出的,它要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则。

案例

需求

有一个公司,下属有各个部门,现要求打印出公司员工的id和部门员工的id

方案一

定义公司员工类

/** * 公司员工 * @author:liyajie * @createtime:2022/2/8 11:52 * @version:1.0 */@datapublic 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 companyemp前期物业管理方案loyee = new companyemployee();            companyemployee.tid("公司员工,id是" + i);            list.add(companyemployee);        }        return list;    }}

定义部门员工类

/** * 部门员工 * @author:liyajie * @createtime:2022/2/8 11:53 * @version:1.0 */@datapublic 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.tid("部门员工,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 companyemploy七夕节诗ee : 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());    }}

查看结果

方案二

该方案与方案一的区别只有两个地方,具体如行楷书法下: 修改后的公司管理类,新增打印公司员工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 = ne郑州八中w companyemployee();            companyemployee.tid("公司员工,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.tid("部门员工,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());    }}

结果

对比分析

方案一,在部门管理类departmentmanager的方法pringallemployee中打印了公司员工id,使用到了类companyemployee,该类既不是departmentmanager的内部属性,也不是方法的入参和返回参数,违反了迪米特原则

方案二,在公司管理类中新增打印公司员工id的方法,并对外提供,在部门管理类departmentmanager的方法pringallemployee中进行了调用,符合迪米特原则

总结

迪米特法则的核心是降低类之间的耦合从被依赖者的角度来说,尽量将逻辑封装在类的内部,对外除了提供的public方法,不泄露任何信息从依赖者的角度来说,只依赖应该依赖的对象

以上就是java设计模式七大原则之迪米特法则详解的详细内容,更多关于java迪米特法则的资料请关注www.887551.com其它相关文章!

本文发布于:2023-04-04 23:00:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b803de03039402b5282b155b3aaca813.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java设计模式七大原则之迪米特法则详解.doc

本文 PDF 下载地址:Java设计模式七大原则之迪米特法则详解.pdf

标签:部门   公司员工   员工   方案
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图