纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

设计模式总篇从为什么需要原则到实际落地(附知识图谱)

10月18日 赤雷榭投稿
  聊聊为什么需要原则
  我们所有人都看过科幻电影,都看到过未来场景中人类和机器人和平相处的场景
  为了让拥有自主智能的机器人不失控,人类为机器人制定了三大定律:第一定律:机器人不得伤害人类个体,或者目睹人类个体将遭受危险而袖手不管第二定律:机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外第三定律:机器人在不违反第一、第二定律的情况下要尽可能保护自己的生存
  当然有时也会出现下面的情况,机器人和人类开始互为阵营,各自为敌
  但是各自为敌的情况出现,一般都是机器人觉醒了自我意识,不再遵守三大定律
  从逻辑学来说,如果机器人完全遵守三大定律及其衍生的条约,那么机器人就可以和人类和平相处,当然也会有意外发生。写代码为什么需要设计原则
  和机器人的三大定律相仿,几十年的编程经验,让几代人总结出来了一些代码设计上的定律,这就是设计模式的七大原则
  我们遵循七大原则,一定会写出最完美的代码吗?
  答案当然是不一定,毕竟没有人能保证自己可以完全遵循七大原则,同时个人的编程能力也会起到决定性因素。
  那我们为什么还要遵守?
  我自己想到的一句名言(以后或许可以成为名言)
  向着最好的方向去努力,总不会是最差的结果。七大原则详解开闭原则
  软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能
  例如:
  以策略模式为例,当我们新增一种策略的时候,只需要实现策略顶层接口,在调用的时指向新的策略即可
  针对这一条原则,在实现难度上要比单一职责更难,在编码期间,我们需要充分考虑未来的拓展性,规范接口,依赖抽象,这样才能在需要拓展的时候,非常方便的实现其效果
  说明:在接入第三方SSO时,如果需要新增接入方,基于文中的案例,只需实现固定接口,即可优雅的实现相应需求依赖倒置原则
  要针对抽象层编程,而不要针对具体类编程
  例如:
  以适配器模式为例,将一个类的接口转换成客户希望的另外一个接口,以此实现的前提便是代码中所依赖的都是抽象的,因为只有依赖抽象,才能在代码运行期间改变其实体,利用多态实现需要的效果
  针对该条原则,其实有一定编程经验的人一定会在无形中注意到,而且了解设计模式的话,会发现所有涉及接口和实现的设计模式都会遵从这一条原则
  最佳实践案例:【一起学系列】之模板方法:写SSO我只要5分钟
  说明:和上一条原则的侧重点不同,在SSO中必然有其固定的流程,如登录获取Token获取用户信息解析退出等等,在代码的编写阶段,需要我们定义出接口抽象类,然后依赖于抽象层,最终改变具体类,以此达到无缝切换的效果合成复用原则
  总结一句话就是:多用组合,少用继承
  例如:
  以单例模式和代理模式为例,它们都是该模式的最佳实践者,单例模式是把不同的策略接口通过组合的方式嵌入到Context类中,如代码所示:publicabstractclassDuck{飞行行为是动态的,可能会变的,因此抽成多个接口的组合,而不是让Duck类继承FlyBehaviorflyB每个鸭子的叫声不同,抽象成接口QuackBehaviorquackB}
  同理,代理模式也是如此,这里就考虑到一个问题,为什么要多用组合而非继承?
  其实还是Java中单继承引发的问题,同时继承的语义过于苛刻,因此更多的时候建议善用组合
  最佳实践案例:【一起学系列】之策略模式:好多鸭子啊
  说明:策略模式就是合成复用原则的最佳实践者,没有之一单一职责原则
  类的职责要单一,不能将太多的职责放在一个类中
  例如:
  在代码设计中某种场景可能存在多种不同的状态,很可能就把代码混在一起了,这时我们利用状态模式进行设计,把各种状态对应的实现细节都用类的级别单独划分,即体现了单一职则原则
  针对这一条原则,其实绝大多数人在设计之初都会考虑到,但问题就在于随着工作中人员职责的交叉,很有可能会破坏他人设计的最初目的,为了方便,让一个类拥有五花八门的功能
  最佳实践案例:【一起学系列】之状态模式:你听过流程模式吗?
  说明:在状态模式中,每一种状态的处理都是独立的一个类,每个类只需要处理自身的核心逻辑,完美体现了单一职责原则里氏代换原则
  在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象
  当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法
  继承包含这样一层含义:父类中凡是已经实现好的方法(相对于抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏。而里氏替换原则就是表达了这一层含义
  例如:
  我们都用过ArrayList,有谁看过forEach方法的源码?ArrayList的父级接口Iterable定义的默认方法defaultvoidforEach(C?superTaction){Objects。requireNonNull(action);for(Tt:this){action。accept(t);}}
  ArrayList重写的方法:OverridepublicvoidforEach(C?superEaction){Objects。requireNonNull(action);finalintexpectedModCountmodCSuppressWarnings(unchecked)finalE〔〕elementData(E〔〕)this。elementDfinalintsizethis。for(inti0;modCountexpectedModCi){action。accept(elementData〔i〕);}if(modCount!expectedModCount){thrownewConcurrentModificationException();}}
  我们看到,ArrayList的重写只是针对数组这种结构优化了性能,其目的性和Iterable接口中的完全一致,因此这种方式的重写不会引起任何问题,反而可以提高效率,我们需要学习这样的方式迪米特原则
  一个对象应该对其他对象保持最少的了解,又名:最少知道原则
  例如:
  在代码设计场景中,某一个类的调用都会固定使用三个方法,是否可以考虑把三个方法抽取出来,提供一个公共的对外方法?这种思路就是外观模式,外观模式也是迪米特原则的最佳实践
  最佳实践案例:【一起学系列】之适配器模式:还有外观模式呢
  说明:利用外观模式构建统一的对外方法,屏蔽其内部实现,这样一旦内部实现需要更改,完全不会影响调用方,你Get了吗?接口隔离原则
  使用多个专门的接口来取代一个统一的接口
  这个模式其实也很好理解,比如我们定义了接口A,接口B实现了接口A,接口C实现了接口B,基类D其实只需要接口C的方法,但是此时不得不实现所有的方法
  其实造成这个根本原因:对接口的抽象,设计出现了偏差
  毕竟看过JDK源码或者Spring源码的同学,可以经常发现某一个接口可能实现了一大堆的接口,但是对于普通开发者而言,没有这种强大的设计能力,就需要在设计的时候多思考,如果发现违背了接口隔离原则的情况,就应该对接口进行拆分思维导图
  作者:Kerwin
  链接:https:juejin。impost5f021453e51d4534a40d9db2
投诉 评论 转载

怒怼台积电,比亚迪坚持用中文键,低调的王传福才是真正实业家?这几年,新能源汽车领域进入前所未有的高潮期。且不说老牌车企造车新势力在抢占市场,就连雷军董明珠等商界大佬也过来想要瓜分一杯羹。新能源汽车的发展前景固然好,不过钱也不……北京大学深圳校区风貌北京大学深圳研究生院(英文简称PKUSZ)是经教育部批准于2001年4月批准成立,是北京大学与深圳市政府合作创办的、以全日制研究生教育为主的办学实体、以全日制研究生教育为主的高……启奥科技进北交所上市辅导期输血信息化企业拥有242项软件著作挖贝网3月30日,新三板创新层公司启奥科技(831287)进入北交所上市辅导期,辅导机构为财达证券。3月22日,启奥科技与财达证券签订了北交所上市辅导协议,同日向河北证监……山东第10万个5G基站开通视频加载中。。。11月28日上午10点16分,伴随着一声洪亮的开通指令,位于济南市章丘区的一处5G基站正式加电、投入使用。这是用5G方式开通的山东第10万个5G基站,山东……想换个苹果的手机,哪个适合学生党?目前128GB的苹果13和苹果12,在官网只差400元,预算够高就上13,或者13P,性价比还可以,如果预算有限,4000左右可以考虑苹果11,线下能找到未拆封的XR也可以,一……设计模式总篇从为什么需要原则到实际落地(附知识图谱)聊聊为什么需要原则我们所有人都看过科幻电影,都看到过未来场景中人类和机器人和平相处的场景为了让拥有自主智能的机器人不失控,人类为机器人制定了三大定律:第一定律:机器……1446亿!华为遗憾落败,芯片巨头反超高通,斩获四个全球第一一、导读西方新规之下,两年时间不到,全球芯片市场就遭到严重破坏,先是汽车产业出现缺芯的问题,进而导致众多车企面临停产,连奔驰、奥迪、宝马都不例外,纷纷暂停了部分生产线;接……用牙膏能修复手机屏幕小划痕吗?这些屏幕知识很少人知道据不完全统计,我们平均每天使用手机时长已经超过3小时,并且这一时间有增无减。大家也越来越关注屏幕对眼睛的影响,OLED屏比LCD屏更伤眼睛吗?屏幕分辨率越高蓝光越强?对眼睛伤害……次元美女录魔卡少女樱大道寺知世小樱最好的朋友,兴趣是拍摄穿着自己制作的服装收集卡片的小樱大道寺知世是大道寺集团的社长千金,是木之本樱的母亲木之本抚子的堂姐大道寺园美的女儿。夜深时会有保……丰田TNGA有什么好?产品力强还开不坏保值率更是YYDS瑞典女诗人索德格朗在其代表作《礼物》中曾有一句诗说:在这五光十色的世界里,我要的只是公园里的一把长椅。从诗人的视角来说,如果世界是炫目的新奇,那么长椅就是朴素的无奇,世界……JDBC连接oracle数据库步骤(一)创建工程,引入驱动包在下图目录中可以找到驱动包ORACLE的JDBC驱动包,拷贝到工程即可使用创建java工程waterboss,建立lib文件夹,将ojdb……作为一个广东人,如果选择一个地方发展,你是会选择深圳还是广州我会选择广州不说啥就说一个支付的问题像很多打工人大多数都会选择交通工具出行吧比如说公交车和地铁等但是在深圳的话我今年暑假有幸去过我在广州玩的时候都是选择支付宝的乘车码来乘车的但……
上古巫族十二祖巫程序员去外包公司好吗?吴某凡被拘!微博被封!人民日报等密集发声!但更值得会计关注的这个国庆节,空调三巨头都干了什么?用声音测量温度?供货紧缺,30系显卡再度涨价,原价卡时代一去不返区块链入门必备108知识点自媒体人怎样拥有自己的(区块链)内容平台,打造属于自己的IP建信基金田元泉张湘龙在新能源产业链赛道上快跑老年人使用智能手机是利大?还是弊大?国货已自强!长安欧尚X7PLUS为啥被称作10万级SUV配置驾驶证和行驶证不能同时放在车里?被交警提醒后,我恍然大悟
吵架斗殴的法律后果是什么?两岁宝宝总乱扔玩具,叛逆期到来如何引导?家长首先要理解孩子愉妃78岁还被乾隆翻牌子,去世后被追封为贵妃,她究竟有何魅力关于民办高校志愿者队伍的调查与建设分析黄益平:如何理解中国金融现象微信身份证绑定与使用注意教程快手起诉被告深圳快手公司侵害商标权获赔万排名造句用排名造句大全再次降价!特斯拉ModelY实拍解读,值得购买吗?成语对对子心力交瘁高中作文例文及评语自然堂冰肌水清润型和凝润型有什么区别?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形