设计模式6大原则之【迪米特原则】
时间:2020-09-20
本文章向大家介绍设计模式6大原则之【迪米特原则】,主要包括设计模式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);
}
类图
修改后我们发现,类与类之间的耦合降低了,实现看起来也更加清晰。
原文地址:https://www.cnblogs.com/xiaoqingtian/p/13701114.html
- 值得关注的5个Python开源项目
- 使用Docker三剑客部署集群
- 将磁盘误挂载到根分区下的问题处理记录
- python文件读写出现乱码总结
- 分布式监控系统Zabbix-图形集中展示插件Graphtree
- 分布式监控系统Zabbix-添加windows监控主机
- 盘点世界十大著名黑客攻击事件
- AS3中的单件(Singleton)模式
- puremvc框架之hello world!
- windows平台下编辑的内容传到linux平台出现中文乱码的解决办法
- puremvc框架之Command
- python sorted函数
- Centos 6.9下部署Oracle 11G数据库环境的操作记录
- puremvc框架之proxy
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 顺序消息管道《Message Pipe》v1.0.2版本发布
- Ts安装及自动编译ts文件
- python 自动化测试(1):获取验证码图片,实现自动登录
- RocketMQ学习第一步之源码构建
- python 库学习之:openpyxl
- python 学习之:读取xml配置文件
- 我的C语言入门笔记~!
- 宜信OCR技术探索之版面分析业务实践|技术沙龙直播速记
- python 学习之:将字符串转换成变量,调用该变量实例对象的方法
- iOS 登录接口封装实践
- 机器学习模型部署—PMML
- 「文档数据库之争」MongoDB和CouchDB的比较
- 【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考
- 新手如何快速入门Python
- 10行Python代码自动清理电脑内重复文件,解放双手!