最新要闻
- 环球关注:20万燃油车能比?百万级轿跑底盘助力:哪吒S麋鹿测试80km/h稳过
- 【新要闻】看看你的工作会被取代吗?ChatGPT时代生存攻略:未来“高枕无忧”的10种工作
- 快看:原美团创始人王慧文进军人工智能:称将打造中国的OpenAI
- 一加Ace 2首销战报出炉:37分钟打破近一年所有安卓机首销全天记录!
- 德国最新电商周销量:AMD完胜Intel
- 固态水指的是什么?固态水冻结状态持续多久?
- 乌鲁木齐机场属于什么区?乌鲁木齐机场到火车站需要多长时间?
- 金色枫叶是什么意思?金色枫叶相关的成语有哪些?
- 无人生还的凶手是谁?无人生还的人物介绍
- 逆生长是什么意思?人怎么才能逆生长?
- 快讯:“小行星”撞地球今日中午上演!法国、英国、荷兰均肉眼可见
- 十大全系标配!长安逸达一出场 就把压力给到合资了
- 【世界速看料】别迷信日本制造!董明珠:格力中央空调国内第一创历史 日立大金都不行
- 国产最帅电动猎装车成了!极氪已交付8万台:完成7.5亿美元A轮融资 杀向全球前三
- 黄旭东评价李培楠《星际争霸2》夺冠:这一刻等了20年!
- 速讯:Redmi K60官宣降价:2999元普及512GB存储、老用户保价+送手环
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
必知必会的设计原则——迪米特原则
设计原则系列文章
必知必会的设计原则——接口隔离原则
必知必会的设计原则——单一职责原则
必知必会的设计原则——开放封闭原则
(资料图片)
必知必会的设计原则——依赖倒置原则
必知必会的设计原则——里氏替换原则
概述
迪米特法则(Law of Demeter )又叫做最少知识原则,即一个对象应该对另一个对象有最少的了解。迪米特法则的目的在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特原则实际上就是一个类在创建方法和属性时要遵守的法则;
迪米特原则核心指导思想为只和直接朋友通信(成员对象、方法参数、方法返回值;值出现在局部变量的类 ,不是直接朋友)。
案例需求1
实现人关机电脑(人关机电脑一般最起码分为三个步骤,第一步先保存当前的任务,第二步关闭屏幕,第三步关机电源)。
未使用迪米特原则的代码
public class Computer { public void SaveTask() { Console.WriteLine("保存当前电脑任务"); } public void CloseScreen() { Console.WriteLine("关闭屏幕"); } public void ShutDown() { Console.WriteLine("关闭电源"); } } public class Person { public void CloseComputer(Computer computer) {computer.SaveTask(); computer.CloseScreen(); computer.ShutDown(); } }
上面person类中的CloseComputer方法中逻辑不符合迪米特原则,如果关机需要三十步,computer需要提供30个方法,每个方法之间都有相应的绝对顺序。
使用迪米特原则的代码
public class Computer { public void SaveTask() { Console.WriteLine("保存当前电脑任务"); } public void CloseScreen() { Console.WriteLine("关闭屏幕"); } public void ShutDown() { Console.WriteLine("关闭电源"); } public void CloseComputer() { this.SaveTask(); this.CloseScreen(); this.ShutDown(); } } //person类中closecomputer方法中的参数computer为直接朋友,符合迪米特原则 public class Person { public void CloseComputer(Computer computer) { computer.CloseComputer(); } }
上面person类中的CloseComputer方法只负责调用Computer中的CloseComputer方法,如果关机电脑这个需求有其他的变化,computer类里面添加方法或发生逻辑变化,person类始终不会发生改变。
关于迪米特原则很多人听到这个词,估计有点陌生,真实编程中可能这样用过,但不知道其名字,所以我们再来看一个案例需求,加深巩固理解。
案例需求2
分别打印总公司和分公司员工的编号;
未使用迪米特原则的代码
public class HeadOfficeEmployee { public int Id { get; set; } } ////// 总公司管理者 /// public class HeadOfficeManager { ////// 获取员工数 /// ///public List GetEmployees() { List headOffices = new List (); for (int i = 0; i < 10; i++) { HeadOfficeEmployee headOfficeEmployee = new HeadOfficeEmployee(); headOfficeEmployee.Id = i; headOffices.Add(headOfficeEmployee); } return headOffices; } /// /// 打印总公司员工id /// public void Print(BranchOfficeManager branchOfficeManager) { var datas= GetEmployees(); Console.WriteLine("总公司员工Id分别是:" ); foreach (var item in datas) { Console.WriteLine(+item.Id); } //branchOfficeEmployes这个集合对象,是通过局部变量的形式出现在类中的,所以不是我们的直接朋友,故不符合迪米特原则。 var branchOfficeEmployes= branchOfficeManager.GetEmployees(); Console.WriteLine("分公司员工Id分别是:"); foreach (var item in branchOfficeEmployes) { Console.WriteLine(+item.Id); } } }
//C# 控制台调用BranchOfficeManager branchOfficeManager = new BranchOfficeManager();new HeadOfficeManager().Print(branchOfficeManager);
以上HeadOfficeManager类中Print方法传递的参数branchOfficeManager是直接朋友,GetEmployee()中返回的集合对象也是直接朋友符合迪米特原则,但branchOfficeManager.GetEmployees()获取的集合branchOfficeEmployes是通过局部变量的形式出现在类中的,所以不符合迪米特原则。
使用迪米特原则改造后的代码
////// 总公司员工 /// public class HeadOfficeEmployee { public int Id { get; set; } } ////// 总公司管理者 /// public class HeadOfficeManager { ////// 获取员工数 /// ///public List GetEmployees() { List headOffices = new List (); for (int i = 0; i < 10; i++) { HeadOfficeEmployee headOfficeEmployee = new HeadOfficeEmployee(); headOfficeEmployee.Id = i; headOffices.Add(headOfficeEmployee); } return headOffices; } /// /// 打印总公司员工id /// public void Print() { var datas= GetEmployees(); Console.WriteLine("总公司员工Id分别是:" ); foreach (var item in datas) { Console.WriteLine(+item.Id); } }}
////// 分公司员工类 /// public class BranchOfficeEmployee { public int Id { get; set; } } ////// 分公司员工管理者 /// public class BranchOfficeManager { public ListGetEmployees() { List headOffices = new List (); for (int i = 0; i < 10; i++) { BranchOfficeEmployee headOfficeEmployee = new BranchOfficeEmployee(); headOfficeEmployee.Id = i; headOffices.Add(headOfficeEmployee); } return headOffices; } /// /// 打印分公司每个员工Id /// public void Print() { var datas= GetEmployees(); Console.WriteLine("分公司公司员工Id分别是:" ); foreach (var item in datas) { Console.WriteLine(+item.Id); } } }
//C#控制台调用new HeadOfficeManager().Print();BranchOfficeManager branchOfficeManager = new BranchOfficeManager();branchOfficeManager.Print();
总结
迪米特原则在我们日常编码中可能往往最容易被忽略,像案例2这样的需求,尤其写第一种方案的代码的人估计不少,我也写过,慢慢掌握了设计原则后,可以和之前写地代码做下对比,心中会有另一番收获。
必知必会的设计原则——迪米特原则
环球关注:20万燃油车能比?百万级轿跑底盘助力:哪吒S麋鹿测试80km/h稳过
【新要闻】看看你的工作会被取代吗?ChatGPT时代生存攻略:未来“高枕无忧”的10种工作
快看:原美团创始人王慧文进军人工智能:称将打造中国的OpenAI
一加Ace 2首销战报出炉:37分钟打破近一年所有安卓机首销全天记录!
德国最新电商周销量:AMD完胜Intel
鼠标不能拖动文件是怎么回事?鼠标不能拖动文件夹怎么解决?
苹果ipad充不上电是什么原因?苹果ipad怎么使用?
YY个人积分怎么计算?yy个人积分在哪里查看?
如何选购抽油烟机?抽油烟机十大名牌排名
word打不开是什么原因?word打不开怎么解决?
固态水指的是什么?固态水冻结状态持续多久?
乌鲁木齐机场属于什么区?乌鲁木齐机场到火车站需要多长时间?
DataX二次开发——HdfsReader和HdfsWriter插件增加parquet文件读写
全链路异步,让你的 SpringCloud 性能优化10倍+
每日焦点!机器学习-SVM
金色枫叶是什么意思?金色枫叶相关的成语有哪些?
无人生还的凶手是谁?无人生还的人物介绍
逆生长是什么意思?人怎么才能逆生长?
快讯:“小行星”撞地球今日中午上演!法国、英国、荷兰均肉眼可见
十大全系标配!长安逸达一出场 就把压力给到合资了
【世界速看料】别迷信日本制造!董明珠:格力中央空调国内第一创历史 日立大金都不行
国产最帅电动猎装车成了!极氪已交付8万台:完成7.5亿美元A轮融资 杀向全球前三
黄旭东评价李培楠《星际争霸2》夺冠:这一刻等了20年!
速讯:Redmi K60官宣降价:2999元普及512GB存储、老用户保价+送手环
不花钱每天能跑12公里 印度首款太阳能汽车亮相:像是“三蹦子”
世界即时:ChatGPT惊动谷歌创始人:罕见出山检查Bard AI代码数据
热议:曝宁德时代将赴美建厂:福特出地出厂房 “宁王”出技术
当前速读:实测用微软ChatGPT写求职信:“不道德”、被拒绝
天天滚动:安全圈最新重大数据泄露事件
世界最新:移动端重排版PDF阅读器比较
Flink 积压问题排查
全球视点!重新思考 Vue 组件的定义
环球快讯:读Java实战(第二版)笔记08_默认方法
当前观点:Opera新版本集成ChatGPT:一键生成网页内容摘要
全球信息:车圈美女测2023新款比亚迪秦PLUS DM-i:1箱油跨8省1300km 油耗3.49L/100km
动态:如何在Debian 11上安装Docker Swarm集群
fusion app登录注册示例
多家快递回应站点派件延迟问题:寄送时效要看站点运力恢复如何
格芯成都晶圆厂烂尾:紫光集团要接手?
豆瓣9.2分 《中国奇谭》今日正式收官!上美影厂还有三部新作
环球视点!学习笔记——尚好房:Apache Dubbo
零跑创始人:增程式结构简单成本低 就是为纯电车加上“充电宝”
天天快看点丨减少牙菌斑 两面针牙膏4支仅需17.9元 加赠2支牙刷
【新视野】系统扭矩590N·m 零百加速6.5秒!长安UNI-V混动iDD开卖:14.49万起
《中国式家长》精神续作 《中国式相亲2》上架Steam
女子驾宝马车“刹车失灵” 罪魁祸首竟是“脚垫”
热文:1月MPV销量排名出炉 GL8、赛那、腾势D9混战 谁将胜出?
快报:1km收费2元多!日本高速公路收费政策再增50年 2115年才免费
上班注意了 北京明起恢复机动车尾号限行:尾号0、5别开车
全球即时看!沃尔沃:自家电动车供不应求 不会跟随特斯拉降价
【全球新要闻】苏联搞砸的火箭 马斯克干成了
全球微头条丨9岁209天!美国一袖珍鼠创吉尼斯纪录:人工饲养“最长寿老鼠”
德系车传统技能?因排放作弊 奔驰或被30万车主索赔
世界关注:读Java实战(第二版)笔记07_用Optional取代null
新资讯:痞子衡嵌入式:我拿到了CSDN博客专家实体证书
全球观焦点:深入解读.NET MAUI音乐播放器项目(二):播放内核
女子戴金手镯做核磁共振:手腕被烫出一圈水泡
环球短讯!三亚旅游发现拔白发服务一小时50元 网友叹服:发量不允许
【全球聚看点】多地对体育中考项目作出调整:取消/选考中考男女生长跑 800米对健康不利
全球短讯!情人节多部爱情电影集中上映:跟邓超新电影强势对垒
每日热文:ChatGPT爆火!争议声也越来越大了
焦点速递!fusion app 常用小技巧
可怕又惊喜!87岁老人棺材内复生 亲属称席都吃了:目前一切正常
全球讯息:200M内存就能启动 Win11极限精简版升级:去除广告
【独家】19岁男孩患阿尔茨海默病 专家:这么做可以远离
全球微头条丨Pytorch环境安装
全球即时:PC销量下滑 AMD的Zen2处理器重新出山:配置没法看
《分布式技术原理与算法解析》学习笔记Day08
清华教授花20多万为村民3D打印住宅:直言房子一点不贵 方式会普及
观速讯丨雷军再次力荐小米13和Redmi K60!一小米之家上午开门就卖了7台
今亮点!土耳其专家称遇上地震是命遭主持人怒斥:网友热议说的没毛病
【天天报资讯】小伙入职1小时被HR告知招错人:补偿50元
全球热门:基于ModelViewSet写接口
当前热讯:日本大飞机失败!印度砸1000亿美元买空客波音500架飞机:为何不自研?
世界观点:杨元庆评兰奇:联想登顶全球PC市场的关键先生去世了
世界热议:女子小巷停车失误一口气撞了10辆:被救时还在踩油门
环球看热讯:女子路边买鹅蛋煮后蛋清是粉色 当事人懵了:不敢吃
全球实时:6档调节 MacBook都能用:诺西笔记本/平板铝合金支架19.9元
世界播报:加倍水润 杰士邦零感爆款避孕套大促:30只19.9元
当前简讯:索尼最强旗舰!Xperia 1 V渲染图首曝
焦点热文:中国女子土耳其地震中被埋:用纸吸雨水求生成功获救
环球热议:基于九个视图子类写五个接口
程序员画图软件推荐
JVM classpath的理解和设置总结
印度官员呼吁将情人节改成抱牛日:可增加幸福感
全球要闻:比尔·盖茨:ChatGPT像互联网发明一样重要、将会改变世界
【环球新视野】C++ 地球人口承载力
头条:5个python中编程的大坑
《流浪地球2》笨笨、门门设计稿公布 网友:别忘了MOSS
特斯拉股价2个月翻倍 马斯克有望夺回首富:只差400亿
天天速递!安卓14第一版正式发布 国产机泛滥的功能终于有了
世界观察:网易一面:select分页要调优100倍,说说你的思路?(内含Mysql的36军规)
买车送游戏机 丰田展示任天堂涂装版“大汉兰达”:内置大屏
最新资讯:好货不等人!森马官方清仓:春季高帮厚底板鞋79元大促(减190元)
每日快报!【踩坑日记】nginx server_name配置多域名的坑
日本独居长臂猿生娃动物园排查其情史:与“邻居”通过9毫米小孔交配
三句话惹生气?百度PLATO大火 网友:智能抬杠机器人
25%高增速:长城汽车2023年冲刺160万辆
星际飞船点火测试成功 马斯克预言:人类10年内登上火星