• 设计模式6大原则之【迪米特原则】


    迪米特原则定义

    一个对象应该对其他对象保持最少的了解。又叫最少知道原则

    • 尽量降低类与类之间的耦合
    • 尽量多使用private,少用public方法

    迪米特原则优点

    • 降低类与类之间的耦合,提高了模块的相对独立性
    • 由于亲合度降低,从而提高了类的可复用率和系统的扩展性

    迪米特原则实现

    一个反例

    老板(Boss)想让经理(Manager)查询一下单位的员工(Employee)数量有多少
    针对这个需求,有以下代码:
    员工类:

    public class Employee {
    }
    

    经理类:

    public class Manager {
        public int getEmployeeCount(List<Employee> employeeList){
            return employeeList.size();
        }
    }
    

    老板类:

    public class Boss {
        public int getEmployeeCount(Manager manager){
            List<Employee> employeeList = new ArrayList<Employee>();
            //假设这里是在数据库查询的
            for (int i = 0; i < 10; i++) {
                employeeList.add(new Employee());
            }
           return manager.getEmployeeCount(employeeList);
        }
    }
    

    测试类:

    public static void main(String[] args) {
            Boss boss = new Boss();
            Manager manager=new Manager();
            int count=   boss.getEmployeeCount(manager);
           System.out.println("员工数量是:"+count);
        }
    

    运行上述测试,返回10没有问题

    类图

    我们发现,测试的类依赖了老板和经理类,老板类又依赖了员工类,但其实我们知道老板是不需要依赖员工的,测试也可以不依赖经理类的,以上做法类与类之间的依赖看起来很混乱

    最佳实现

    我们重新调整依赖关系
    经理类:

    public class Manager {
        public int getEmployeeCount(){
            List<Employee> employeeList = new ArrayList<Employee>();
            //假设这里是在数据库查询的
            for (int i = 0; i < 10; i++) {
                employeeList.add(new Employee());
            }
            return employeeList.size();
        }
    }
    

    老板类:

    public class Boss {
        public int getEmployeeCount(){
            Manager manager = new Manager();
           return manager.getEmployeeCount();
        }
    }
    

    测试类:

    public static void main(String[] args) {
           Boss boss = new Boss();
          int count=   boss.getEmployeeCount();
         System.out.println("员工数量是:"+count);
      }
    

    类图

    修改后我们发现,类与类之间的耦合降低了,实现看起来也更加清晰。

  • 相关阅读:
    代码4
    readline,readlines,read函数
    代码3
    find函数
    字典的循环和if语句
    代码2
    代码1
    python除法
    字符串
    print函数
  • 原文地址:https://www.cnblogs.com/xiaoqingtian/p/13701114.html
Copyright © 2020-2023  润新知