一、开闭原则 (
核心:面向抽象编程
)
概念:对拓展开发,对修改关闭
理解:就是子类继承父类,继承父类的方法,保证父类原来方法逻辑不变的基础上,新增新的方法,这样既保证了原来的方法,有增加了新增的逻辑处理。
二、依赖倒置原则 (
核心
:
面向接口编程
)
设计代码结构时,高层模块不应该依赖底层模块,从顶层接口开始设计,然后在通过实现接口(把具体逻辑细化),它们都应该依赖抽象类,减少类之间的耦合。
依赖注入就是采用这个样的一个概念。定义抽象的顶层接口,然后通过不同的实现,来满足不同的需求
三、单一职责原则 (
核心:尽量保证类,方法功能的单一性,即使其职责:最小粒度化
)
功能单一,只负责自己的事情,不做多余的事情
,可以减少类的复杂度,提高类的可读性,这样不会应为本身修改了,从而影响到其他的类,也不会因为其他类修改而影响。
做法:抽象出不同的功能,然后创建顶层的接口,需要什么功能就可以去实现什么接口
四、接口隔离原则 (核心:只抽象自己的业务接口,减少冗余)
接口隔离化,根据实际业务情况,抽象出多个接口, 使得每个接口有自己的业务(功能),而并不是将不相关的写在一起
举个例子就是:比如说:动物的接口(业务/功能 如:吃,睡,游泳,飞,行走),如果都写在一个接口里面,那么默认实现这个接口的类,就都具备(吃,睡,游泳,飞,行走)等功能,这样就违反了接口隔离,就是说实际情况下,并不是所有的动物都具备这些功能(如:吃,睡,游泳,飞,行走)。显然这些功能不是相关的。因此需要将不同的功能,分别用接口来实现。这样的话,那么如果是小狗,那么就只要实现(吃饭,行走)即自己需要的接口。这样就实现了接口的隔离
五、迪米特法则(核心:只关心跟自己有关的,不跟陌生人说话)
最少知道,不该知的不需要知道(只关心跟自己认识的,或业务上相关性的类/对象进行沟通)这样可以降低耦合度。
例子:就是(家长,学生)学生学习多门课程,场景:如果家长需要知道学生学习了多少个课程,那么只有询问学生就可以了。因此这个逻辑需要放在学生类里面。家长只要知道了学生,那么久知道了有多少门课了。
六、 里氏替换原则 (核心:继承的范围一次递减 (如父类:map ->子类hashMap))
子类可以拓展,减少对父类的修改,不要覆盖(重写)父类的方法,子类新增方法来拓展新的逻辑
防止继承泛滥,特殊的逻辑,放入特殊类中,不需要抽象为接口。
传参时候,如参数入参范围比父类小,那么执行子类方法,反之执行父类方法。父类的入参和输出参数,比子类的入参和输出参数更加宽松。就是:子类的参数不能比父类更加宽松
七、合成复用原则 (核心:能聚合,不继承)
合成/聚合,继承
合成/聚合:就是组合中的每个功能,都是可以独立的,就纯粹的将多个功能组合起来,让功能更加的强大(就是说组合中的每个功能相互没啥关系)。
继承:就是子类父类的关系,是有关系的。子类继承的父类的功能,子类也可以扩展自己的方法。但是子类相对来说就不能脱离父类,独立出来了(不能独立去掉父类相关的方法)。有利于后期代码的升级维护