总的来说,能感觉到这六个原则有一句话总结就是“开闭原则相当于抽象,而其他的五个原则:如单一职责原则、迪米特法则、里氏替换、依赖倒置、接口隔离等都是相当于开闭原则这个抽象的具体化”
应该怎么理解这一句话呢,从以下几个角度出发可能对自己这个java_green_bird友好一点。
我觉得遇到晦涩难懂的概念的时候,用自己熟悉的自然语言去解释他,让自己能够充分理解是一个不错的方法。
回到六个原则中来,为什么说开闭原则是抽象的,你抽象的相当于一个老大(不算一个100%的纯掌握全部权利的老大,最起码也是掌握的大部分权利的老大身边的副手吧~比如戴着眼镜留着蘑菇头的翻译官),我具体化的东西都得按你这个来
这是因为呀,咱们平时做项目或者写代码的时候,经常会碰到我已经写好了代码,或者已上线或者已经…(反正就是完成了,自己感觉已经做完了),但是boss又让我去改去修去补(糟老头子坏得很,不讲武德),一次两次小修小补还行,你要碰到那种动不动就要拆我写好的一堆代码,给你连根快拔起那种。
所以呢,尽量别去修改(这不就对修改关闭了门),可以封装一个接口、一个类、一个方法作为中介,然后可以结合封装、继承、多态等等,然后去实现怎么要增强的功能。(原来我没有,我找了个中介,那这个中介可不可以算作是我的一种扩展)
***当然,要特别写给自己的一句话就是,那么把这六种原则反复看,但是其中的尺度其实真的很难把握,就比如
就像书中人家作者说的一样,具体问题具体分析(这句话很有道理呀,咱们的前辈们很多都说过相关的话:一切从实际出发、理论联系实际…),咱们唯一能做的就是,多学学,学了肯定有效果,大小与多少的关系罢了,但你不动你永远掌握不了*,不是嘛**
下来就到五个具体的原则了,他们彼此之间有很大的联系,原则中体现的一些想法都是很有联系很相近的。
下面就分享一下自己看了书之后的一些感触吧。
1.单一职责原则
接口一定要做到职责比较单一
记录书中的新话:咱们一般做项目,肯定要接触到用户、机构、角色管理这些模块,基本上使用的都是RBAC模型(Role-Based Access Control,基于角色的访问控制,通过分配和取消角色来完成用户权限的授予和取消,使动作主体(用户)和资源的行为(权限)分离)
左边就是咱们把所有的写到一个接口中,右边是按照单一职责优化过的良好的代码。
类尽量这个类只有一个原因能够引起类的变化
除了操作资源类的和其他功能的两种要分开
还有咱们的单一职责在方法上面的应用(虽然就来一个方法很爽,给方法中放很多不同类型的形式参数来实现不同的功能逻辑等),咱们项目中用方法实现了几个功能:
尽量让每个方法的职责也明确一点,把他们分开。
但是还是那句话,过犹不及,别分的粒度太细太细太细了。
2.接口隔离原则
接口隔离原则,可以举个例子就是:小胡的老婆闫sir(YWM)说,老胡,这个月你的工资咋还没上账呢,我的余额还没增加呀。小胡说,好,保证解决任务长官。过了10秒钟他老婆的账上立马多了些钱。**这种不讲条件、立刻完成任务的行为就是高内聚的表现。**具体到接口隔离原则中就是,尽量少向外公布一些public方法,这样可以降低变更的风险。
接口隔离原则的作用我觉得也是和单一职责差不多,都是想着把一个大的臃肿的接口分为多个功能比较纯的比较明确的小接口。不要让接口中太臃肿了。但是他俩审视的出发点还是有点区别的
但是满足接口隔离职责之前肯定是要先满足单一职责原则的
另外除了按照咱们的功能方法或者职责角度(单一职责或者接口隔离)去考虑解耦类、接口、方法等,当某一个方法(假设咱们整个类或者接口中有多个方法时)很明显有拖低咱们代码执行效率的风险或者说他不太安全,那咱们也可以把这个方法单独放出来(放到一个中介接口或者类中)
3.依赖倒置原则
依赖倒置原则我觉的人家书里提到的几条规矩还是挺好的,咱们平时写代码的时候,碰到书里面的不让干的啥啥啥…,咱就尽量规避一下类似冒险行为。碰到书里的尽量让干啥干啥干啥,咱们就多按照人家的原则,优化优化呗。
4.迪米特法则
迪米特法则我觉的主要有以下几个点:
5.里氏替换原则
上面举的例子中Map、HashMap、List、ArrayList的关系,可以参照下面的图
其实也好理解,就是一般子类咱们有的时候就复用父类中的全部东西,或者子类会再增加一些自己独有的方法呀属性呀等等。所以整体上来看,子类是比父类“大或者叫宽”的