范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

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

河北千年古庙会火爆开启,游客争相贴硬币祈福每年进入农历三月,有着1300多年历史的苍岩山庙会开始热闹起来。来自河北各地及周边省市的善男信女们,纷纷赶来参加庙会,现场游客比肩接踵,热闹非凡。走遍整个景区,最热闹的莫过于游客争C位出道!石家庄最美樱花大道怒放,立体手绘勾勒春光画卷春暖大地,花开正盛!4月19日,来到位于石家庄龙泉湖公园,一条铺满樱花的小路C位出道,格外醒目,引来众多游客前来打卡,俨然成了一条网红路。这条路就是被众多网友称为最美的樱花大道。(美爆了!石家庄晚霞又双叒叕霸屏,夜幕下滹沱河畔游人如织6月20日傍晚,石家庄上演一场绚丽多彩的晚霞秀,落日余晖将天空染成一片红色,美轮美奂。在晚霞的印染下,石家庄冀之光塔和滹沱河勾勒出了一副美丽的画卷。傍晚,石家庄上空的卷层云中还出现石家庄现高颜值天气巨大的日晕光环挂上天,简直美翻了结束了多日的阴雨天气后,6月15日,石家庄迎来高颜值天气,晴空万里,蓝天白云。中午时段,市区上空出现日晕气象景观,烈日被一圈彩色的光环所包围,非常壮观,吸引了众多市民拍照。这是在石沙尘退,国际庄现七彩祥云!网友不吃土了,重回庄里蓝随着新一轮的沙尘暴消退,5月10日,石家庄市区上空惊现七彩祥云,蔚蓝的天空上变得绚丽多彩。这一难得的天气奇观,吸引了众多市民驻足拍摄。不少网友感慨道希望蒙古国早日降雨,不要让我们在雄安速度!绿博园雏形已现,4年后一场盛会将在此举行5月12日,在雄安新区绿博园内,机械轰鸣,塔吊林立,一派热火朝天的建设景象。14座特色核心城市展园及城市林拔地而起,并且雏形已现。预计,将于6月30日完工。2025年,全国第五届绿邢台环保麦收,秸秆打包回收,空中俯瞰犹如一幅麦收画卷6月14日,在河北省邢台市宁晋县5万亩小麦绿色高产高效创建核心区麦田里,机械轰鸣,麦收过后,一台台秸秆打包机犹如大食客,一个多小时就吃掉了三亩地秸秆,吐出一个又一个秸秆方块包。空中雄安最美长廊犹如蜿蜒在淀中的长龙,成网红打卡地夏天到了,华北明珠白洋淀里,一望无际的芦苇荡开始返青,苇杆上吐露出嫩绿的枝叶,到处弥漫着浓郁的苇香。在雄安新区白洋淀湿地公园内,来自各地的游客纷纷来到十里长廊栈道上,一睹白洋淀荷塘五一雄安容西灯火通明,塔吊林立,2。2万名工人奋战一线5月2日晚,正值五一劳动节假期。在位于河北省雄安新区的容西片区内,灯火通明,机械轰鸣,塔吊林立,到处一派热火朝天的建设景象,2。2万名工人奋战在建设一线,助力雄安快速发展。(王伟倩正定有棵400岁的爱心树,游客比心示爱,成网红树经过一轮降雨后,6月17日傍晚,石家庄出现了绚丽的晚霞,天空如画卷般美不胜收。在位于正定古城临济寺前的广场上,一棵形如爱心的古树,在晚霞的映衬下更是美轮美奂,吸引了众多市民前来打卡雄安速度!雄安首个集中型住宅区面向全国招商5月17日,航拍雄安新区容东片区,上千栋新建的安置房拔地而起,随着内部装饰和外墙施工的稳步推进,容东安置区呈现出一派生机勃勃的景象。作为雄安新区首个集中型住宅片区项目,容东安置区已
本田奥德赛试驾2。0L锐尊享版,配7座侧滑门实力如何?作为一款MPV车型,奥德赛销量虽然不及别克GL8,但在同级别车中也是翘楚,从7月份公布的销量来看,卖出了5862台。对于家庭用户来说,奥德赛外观沉稳大气,空间满足7座没有问题,算是试驾迈巴赫S级,配3。0T双涡轮空气悬架,卖146。8万贵吗?每个人的梦想不同,作为一个专业车评人,对于我而言想在未来的人生中开上迈巴赫S级。虽然目前没有钱购买,但我自己有一定的渠道,最近试驾了2021款S4804MATIC,目前在售版本只有风神奕炫MAX紧凑型定位车长近4米8,标配1。5T引擎实力如何?对于年轻人来讲,买车肯定以家用舒适为主,如果能在此基础上具备一定运动感就再好不过了,如果在此基础上能够具备同级别比较好的空间,能够抵挡诱惑的就比较少了。现在很多国产新车型都是往这几当红时文如有不幸,我愿捐出遗体作者王永波如有不幸,我愿捐出遗体作者江苏淮安王永波编审天美五星如有不幸我愿捐出遗体供攻克病毒研究这,就是在冠疫肆虐在与死神短兵相接的搏杀中武汉天佑医院小护士李慧留下掷地有声的铿锵誓言但李慧是当红小小说有情没情租个女友过年作者王永波原创首发有情没情租个女友过年(小小说)作者江苏淮安王永波编辑天美五星现在社会真是太疯狂了。租妻租女友这样的词眼竟然在网络上堂而皇之地出现。要过年了,这样的词眼出现的频率更高。要不是我亲眼所哈弗H9起售20。98万,标配2。0T引擎等不到坦克300就看它!对于国内消费者来讲,硬派越野SUV越来越多,比如说目前比较火爆的坦克300。但我们也不能忘了一些原有的真香车型,就比如说长城哈弗H9。作为一款中大型硬派越野SUV,目前2020款车颜值高配置全有品质,年轻人的摩登座驾是何模样?KiWiEV看我!对老一辈而言,汽车也许就是沙发4个轮子但对年轻一代来说,汽车是提升生活品质的关键消费品。为此,年轻人对车辆的用车品质也有一定要求,即便是微型电动车,年轻人也希望其具有较高的用车品质C实战050C调用C动态链接库及类库详解动态链接库动态链接库全称DynamicLinkLibrary(简称DLL),通常是由一组实现某种特定功能的函数集合。它包含了该功能的具体实现方法和资源,通过编译生成一个后缀为DLL真快乐APP改版试运营启动乐购新升级开启品质消费时代10月21日,以乐购新升级为主题的真快乐APP改版试运营发布会在京召开。本次发布会上,真快乐APP改版试运营,重点打造购乐两大版块。中国商业联合会副会长张丽君,中国商业联合会副秘书新年吃火锅庆团圆,帅锅聚齐来拜年过年啦!在传统的中国年里,全家在一起吃顿年夜饭成为了庆团圆的一种标志,在餐桌上各种美味佳肴数不胜数,火锅自然也被列入其中,深得人们的宠爱。大家围坐在一起,吃着热气腾腾的火锅,那气氛郑州雁鸣湖镇开展绿城妈妈巧手编织快乐相伴活动为丰富社区女性的业余生活,增强居民之间的互动,培养他们的兴趣爱好和提高他们的动手能力,3月16日下午,在中牟县妇联的指导下,恩夕社工在雁鸣湖镇朱固社区组织开展绿城妈妈巧手编织快乐相