美文网首页Java工作知识
设计原则:迪米特原则

设计原则:迪米特原则

作者: 谁家的猪 | 来源:发表于2019-07-12 07:29 被阅读1次

    定义:一个对象应该对其他对象保持最少的了解。又叫最少知道原则
    尽量降低类与类之间的耦合
    优点:降低类之间的耦合
    强调只和朋友交流,不和陌生人说话
    朋友:出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

    示例

    实现一个老板命令组长去查询课程数量的Demo

    代码实现

    1. 创建Course类,只需要空的类
    /**
     * @author lijiayin
     */
    public class Course {
    }
    
    1. 创建TeamLeader类
    import java.util.List;
    
    /**
     * @author lijiayin
     */
    public class TeamLeader {
        
        public void checkNumber(List<Course> courseList){
            System.out.println("课程数量为:" + courseList.size());
        }
    }
    
    1. 创建Boss类
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author lijiayin
     */
    public class Boss {
        public void commandCheckNumber(TeamLeader teamLeader){
            List<Course> courseList = new ArrayList<>();
            for (int i = 0; i < 20; i++) {
                courseList.add(new Course());
            }
            teamLeader.checkNumber(courseList);
        }
    }
    
    1. 创建测试类
    /**
     * @author lijiayin
     */
    public class Test {
    
        public static void main(String[] args) {
            Boss boss = new Boss();
            TeamLeader teamLeader = new TeamLeader();
            boss.commandCheckNumber(teamLeader);
        }
    }
    
    1. 测试结果


      测试结果.png
    2. UML图


      UML.png
    3. 存在问题
      因为TeamLeader是Boss方法的入参,所以TeamLeader是Boss的朋友,而Course不是,因此不应该出现在Boss中。

    改进Demo

    代码实现

    1. 修改Boss类
    /**
     * @author lijiayin
     */
    public class Boss {
        public void commandCheckNumber(TeamLeader teamLeader){
            teamLeader.checkNumber();
        }
    }
    
    1. 修改TeamLeader类
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author lijiayin
     */
    public class TeamLeader {
        
        public void checkNumber(){
            List<Course> courseList = new ArrayList<>();
            for (int i = 0; i < 20; i++) {
                courseList.add(new Course());
            }
            System.out.println("课程数量为:" + courseList.size());
        }
    }
    
    1. 测试结果


      测试结果.png
    2. UML图


      UML.png

    相关文章

      网友评论

        本文标题:设计原则:迪米特原则

        本文链接:https://www.haomeiwen.com/subject/yhujkctx.html