作为程序员 你真的会写代码么? 谈起程序员 一般最多的声音 就是cv大法 和 增删改查,难道程序员门槛那么低么?
cv大法 和 增删改查 的背后 是什么呢?
今天我们来谈谈 solid 原则?可能一些刚入行的程序员都没怎么听过 solid原则,听得最多的事 可能就是设计模式,他们俩的关系又是什么样的呢?
不管学习什么 一般的思路都是 what why how
首先我们先看下上网对solid 的解释? 网上的说法 设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。前辈们总结出来的,遵循五大原则可以使程序解决紧耦合,更加健壮。
单一责任原则
指的是一个类或者一个方法只做一件事。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化就可能抑制或者削弱这个类完成其他职责的能力。例如餐厅服务员负责把订单给厨师去做,而不是服务员又要订单又要炒菜。
开放封闭原则
对扩展开放,对修改关闭。意为一个类独立之后就不应该去修改它,而是以扩展的方式适应新需求。例如一开始做了普通计算器程序,突然添加新需求,要再做一个程序员计算器,这时不应该修改普通计算器内部,应该使用面向接口编程,组合实现扩展。
里氏替换原则
所有基类出现的地方都可以用派生类替换而不会程序产生错误。子类可以扩展父类的功能,但不能改变父类原有的功能。例如机动车必须有轮胎和发动机,子类宝马和奔驰不应该改写没轮胎或者没发动机。
接口隔离原则
类不应该依赖不需要的接口,知道越少越好。例如电话接口只约束接电话和挂电话,不需要让依赖者知道还有通讯录
依赖倒置原则
指的是高级模块不应该依赖低级模块,而是依赖抽象。抽象不能依赖细节,细节要依赖抽象。比如类A内有类B对象,称为类A依赖类B,但是不应该这样做,而是选择类A去依赖抽象。例如垃圾收集器不管垃圾是什么类型,要是垃圾就行。
这时候 需要另提一句,为什么有时候 八股也背了 面试题也刷了,面试的时候,感觉回答的也可以,最后却没有offer, 其实原因也很简单 你没有理解面试官到底在问什么,也就是即使你把 solid原则 有哪些 背的再熟练?redis 的数据结构类型有哪些记的再清楚,怎么进行sql优化说的再再正确 ,你都无法打动面试官,
听我这么一说你是不是心想 这还怎么玩? 其实呢你需要洞察标准答案背后的底层逻辑,也就是为什么问你这个问题,面试官想要的答案到底是什么,也就是高中的时候 老师总教我们 换位思考,知彼知己百战不殆嘛。可以肯定的是 面试官想听到的肯定不是 百度 上可以搜到的标准答案。
接下来 我们谈下为什么要去了解他 solid 原则,也就是面试官为什么要去问这个问题?
这就是上面我们说的 复制黏贴 和 增删改查 的背后 到底是什么?因为高级程序员和初级程序员 都是在复制黏贴 和 增删改查,其实在一定程度上通过你对solid 原则理解的深度就可以判断出来你的代码能力, 也就是 面试官想看看 你到底会不会真的写代码?
写代码的最终目的是 高内聚,低耦合,易扩展
刚开始学习java的时候,我们都知道java 的三大特性, 封装继承多态嘛 高内聚 对应的 就是 java 的封装特性, 低耦合,易扩展 就是对应的是java多态特性, 高内聚 说成人话就是你把一个业务场景 抽象成很多的功能模块,也就是很多独立的服务方法或者工具。也就cv 背后的 模块化思想 低耦合,易扩展 我的理解 低耦合是为了写一段新的功能 能够保证之前的功能不会受到新功能的影响,而 因为没有强依赖关系,易扩展是为了可以不必考虑之前的功能,无脑的的加入新的功能 因为留了扩展口子,控制了影响范围。新手最容易犯的错误,就是喜欢把一个类写的很多很多方法,一个方法写很多很多逻辑。有时候一个类 六七千行甚至上万行,你说你改这种代码,就算是你再有经验的程序员在这种代码上加功能 也是头大。
这时候就引出了solid原则, 一个项目 大点的一般都会有十几人或者几十人 开发,如果大家都遵循solid原则 ,就能写出 高内聚,低耦合,易扩展 的代码 而且三大核心 也是基于java 的三大特性 的提炼出来的
然后我们介绍下 solid 原则 设计模式 的关系。
商城,医疗,金融,旅游,或者大麦抢票各个领域吧基本上都有程序员的影子,也就程序员面对的业务是不确定的,设计模式是为了迎合各种不确定业务场景,经过前辈们的经验并经过反复验证,总结出来一些写代码的总结,就像兵器 有 倒枪棍棒斧钺钩叉一样,每一个兵器都有自己的优点,和适合的场景
设计模式 具有可变形 因为他要迎合业务场景。
solid原则 具有不变形,设计模式是在遵循solid原则的基础上衍生出来的各种代码模式。
就有点 小学的时候学习的加减乘除,是不变的, 初中的时候学的一元一次方程,二元一次方程,三角函数等等都是在加减乘除的基础上 衍生出来的更有效落地的解决实际问题的方案。
最后总结一下,当面试官问你solid的时候是想知道你的代码能力? 他其实想听到 不仅仅不是solid本身。 而是 上面提到的写代码的三大核心和 23种设计模式,以及你怎么使用设计模式在各种业务中。
下一个视频我们具体讲下 how 也就是怎么使用 solid原则,以及代码中的体现。