单一职责原则
概述:每个类只负责一件事情
好处:降低了一个类的代码复杂度。 提高了维护性,一个功能发生变化不影响其他代码
实际开发中,最能体现单一原则的其实是在方法中,一个方法基本都是具体实现一个功能
接口隔离原则
概述:在实现接口的时候我们应该实现最小单位的接口。 也就是说比如有A接口有 test1(),test2(),test3(),test4()四个方法。我们实现类只需要一个test1()方法。那么这时候就要必须重写另外三个接口。这时候可以使用 B类有一个test1()方法抽离出去,实现test1()方法即可。避免了重写多余的接口
好处:避免因为实现接口而重写多余的方法,接口的方法应该细化,这样就使接口更加细化。并且降低了耦合
依赖倒转原则
概念:如果一个A类依赖了B类,那么B类就应该有一个对应的抽象类或者接口。其实就是面向接口
好处:高扩展,也就是如果A类依赖B的接口,那么如果这时候又想添加一个C类也想使用这个A类中的方法,那么只需要实现这个接口就ok了
里氏替换原则
概念:一个A类有一个子类B类,如果C类依赖了A类,那么就会有B类替代A类而代码逻辑不会改变。解决办法:比如可以使用new A() 对象,直接调用父类的方法,这样也是为了避免子类
好处:通过这个规范约束了尽可能的不重写父类的代码,即使重写那么子类相对于父类的逻辑是不能改变的。降低了代码的出错
开闭原则
概念:对使用者关闭修改,提供者打开扩展。也就是说使用者是 A类,A类中有一个方法test()。而提供者B类中调用这个方法,如果提供者的参数发生改变A类在不进行修改的情况下也能兼容。比如 面向接口
好处: 代码更加灵活
迪米特原则
概念:也就是最少知道原则。在代码中只能和直接朋友进行通信。
直接朋友:成员变量 入参 出参
好处:降低了代码之间的耦合,比如A类中的方法test()。如果在这个方法中使用了new C(),那么这个C其实就是一个非直接朋友,其实这样会增加耦合性,因为如果我A类想要使用这个C,B类也想使用这个C完成什么功能,如果C发生了改变那么A和B的方法都要需改,这时候可以在其他类中将这个功能实现了,A类或者B类只需要调用这个方法就行了
复用原则
概念:尽量使用合成或者聚合的方法而不是使用继承
好处:降低了耦合。 因为比如 动物类 中有一个 name 。如果 鱼类 想要使用这个name 就去继承这个 动物类 。这样就会导致 鱼类和动物类是没有关系的两个类,仅仅因为想要使用动物类中的一个属性就去继承,耦合性太大