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

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

  聊聊为什么需要原则
  我们所有人都看过科幻电影,都看到过未来场景中人类和机器人和平相处的场景
  为了让拥有自主智能的机器人不失控,人类为机器人制定了三大定律:第一定律:机器人不得伤害人类个体,或者目睹人类个体将遭受危险而袖手不管第二定律:机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外第三定律:机器人在不违反第一、第二定律的情况下要尽可能保护自己的生存
  当然有时也会出现下面的情况,机器人和人类开始互为阵营,各自为敌
  但是各自为敌的情况出现,一般都是机器人觉醒了自我意识,不再遵守三大定律
  从逻辑学来说,如果机器人完全遵守三大定律及其衍生的条约,那么机器人就可以和人类和平相处,当然也会有意外发生。写代码为什么需要设计原则
  和机器人的三大定律相仿,几十年的编程经验,让几代人总结出来了一些代码设计上的定律,这就是设计模式的七大原则
  我们遵循七大原则,一定会写出最完美的代码吗?
  答案当然是不一定,毕竟没有人能保证自己可以完全遵循七大原则,同时个人的编程能力也会起到决定性因素。
  那我们为什么还要遵守?
  我自己想到的一句名言(以后或许可以成为名言~)
  向着最好的方向去努力,总不会是最差的结果。七大原则详解开闭原则 ★★★★★
  软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能
  例如:
  以策略模式为例,当我们新增一种策略的时候,只需要实现策略顶层接口,在调用的时指向新的策略即可
  针对这一条原则,在实现难度上要比单一职责更难,在编码期间,我们需要充分考虑未来的拓展性,规范接口,依赖抽象,这样才能在需要拓展的时候,非常方便的实现其效果
  说明:在接入第三方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

华为Nova9真机曝光外观酷似荣耀50,依旧没有5G售价,或2999起华为Nova9系列根据曝光将在2021年9月23日发布,由于这部手机对于华为来说不是重要的旗舰机,保密工作做得一般,目前它的真机已经被曝光。从曝光的图片来看,华为Nova9的外观设别再上当了!买手机记住这5点!你也是半个内行人这篇文章教大家如何快速选购适合自己的手机!屏幕主流手机基本都是OLED,像有些厂商经常说的影音大屏其实并没有多好,就是LCD屏主流分辨率至少都是1080p,2k及以上屏幕也有很多。2021年颜值最高的四款手机推荐,屏占比最高100智能手机最初流行的时候,颜值是很多机友最看重的。但机友们有没有发现,现在很多手机发布的时候都不会把颜值当成主打卖点了。这是为什么呢?图片来源于网络我们对比几款手机就知道了,因为现在iPhone13Pro选128G还是256G?前提是自己是否真的会用iPhone13Pro拍视频呢?如果答案是否定的,那4K30fps的ProRes真的不值得用来左右存储空间的选择。ProRes可以简单地理解为视频版的AppliOS15终于来了,7年了,iPhone6S居然还能更新编者按iPhone13发布之后,iOS15的更新终于提上日程,而在今天,iOS15已经开始大面积的更新,从更新名单来看,最新发布的iPhone13以及最早的iPhone6S都是支持电脑RedmiG游戏本提前看联想870新平板2K120Hz屏早前小米笔记本预热称RedmiG游戏本2021新款笔记本电脑将于9月22日上午10点发布,要做一款同档无敌高性能光追游戏本。现在官方提前公布了其外观,来带大家简单看下具体配置价格就金立手机回归之作?金立m11讲解众所周知金立手机在2018年早已经倒闭了!但是在2019年9月又一次复出了!到现在已经成为了山寨机!那么今天阿军就给大家讲解一下金立回归的首款手机金立M11(金立回归时候上市的第一传苹果将推出两款折叠屏手机或于2023年问世近日,外媒BusinessKorea表示,根据内部人士消息,苹果正在开发两款折叠屏手机,预计这两款产品将于2023年问世。细节方面,BusinessKorea称苹果的两款折叠屏手机怎么做好社群营销?关于这点,已从事两年社群营销的我,有一些思维与技巧,大家可以参考一定位首先要明确的就是自己的专属领域,是学习类,还是健康养生,还是护肤,还是其他什么。然后就是你服务的人群,是大学生Win11操作系统即将发布,除已知界面变化之外还有其他优化再过两个星期,微软公司的Win11操作系统便要公布了,官方网站一直以来特别强调这也是近年来极具革命性的系统更新。除去已经知道的操作界面转变以外,Win11还优化了性能指标,降低了内王自如到岗不到半年助董明珠再续手机梦本报记者贾丽格力造再次获得关注。这次,它换了个身份,以大松品牌新款手机面世。近日,工信部电信设备认证中心官网显示了格力新款手机的信息。该款手机是格力旗下品牌大松的一款旗舰机型,采用
想选一款一千五六的手机,内存要6256,处理器7系的,有什么牌子?在千元机市场中,很少会有厂商去做高内存版本。不仅是因为这样会让手机的价格虚高,丧失性价比的标签,高内版本的销量上不去,而且中端手机的换机周期一般在23年,大内存意义并不大,用户对高这四款几百元的手机,用个两年不是问题,都是百元神机大多数码爱好者的目光都聚焦于旗舰机,但旗舰机不但有着顶级配置,也有着高昂的价格,不是所有人都可以消费的,尤其是学生党。其实,对于对手机需求不太高的用户而言,旗舰机反而性能溢出,一款牛气!华为宣布把欧拉系统捐赠给国家,任正非的做法令人敬佩牛气!华为宣布把欧拉系统捐赠给国家,任正非的做法令人敬佩。本文原创,禁止搬运和抄袭,违者必究!导语华为的第一代鸿蒙操作系统于2019年的时候发布的,然后就是紧接着在今年6月份的时候特斯拉跨行了?特斯拉手机渲染图曝光,外观设计酷似汽车前有手机厂商小米进入汽车领域,后有汽车厂商开拓智能手机市场,它就是特斯拉。近日,外媒曝光了一组特斯拉手机渲染图,该机在外观设计上加入了许多汽车元素,以及突破常规的形态,与众不同的设iPhone14Pro设计曝光,后置四摄,屏幕下指纹识别?无刘海?iPhone14Pro系列曝光了设计,看起来这一代有新的变化?刘海真的消失了,但应该为了3d结构光,还是保留了开孔,不过不确定是否这一代就是一个手机屏幕开孔。但这个屏幕最高刷新率会手机同质化如此严重,该如何挑选一部适合自己的手机呢?该如何选择一部适合自己的手机呢?哪款手机更好呢?我相信这是不少同学在选择手机的时候经常问到的问题,现在各大品牌每年都会推出很多新款,看似都是新款,大家有没有发现问题?那就是这些手机洗地机关注的点在哪里,三机横评告诉你石头,添可,追觅前言之前是不是写过好几篇洗地机了?一篇一篇来很累啊,所以今天,我们一口气,做三款横评,都是非常有代表意义的,同时价差也不是很大,在500rmb上下,我们话不多说,开始。一。测试相关AirPods3与AirPods2对比区别很明显对于想要购买苹果无线耳机的人来说,现在有了更多选择,因为在10月19日,苹果发布新款笔记本电脑的同时,也推出了第三代无线耳AirPods3。AirPods3以重新设计的外观和更多功苹果se3要来了,准备好钱包了吗一代se刚出风靡全球,好评如潮,过了好多年苹果才重新启动了这个项目出了个se2。相信有一直关注苹果新机至今的果粉们应该都知道了,目前来看,由于销量非常惨淡,苹果大幅削减了产量,而今双11大促第一弹!4款最值得入手的散热器种草推荐是风冷?还是液冷?这是很多DYI用户们最关心的问题。而今天笔者就趁着双11前夕,为大家推荐四款火爆的散热器,其中就包括了两款风冷散热和两款液冷散热,各位也可以根据自己的喜好进行选择千元投影仪怎么选(下)精致小巧的极米NEWPlay特别版前言上篇内容是小明Q1Pro,这篇我们来分享的是极米NewPlay特别版上篇我们说了投影仪的优势是可以在更低的价格投出更大的屏幕,足不出户就有电影院的体验,而且便携性更强,对于年轻