开闭原则是所有原则的总目标,所有原则最终都是为了走向开闭原则
开闭原则简单来说就是指对扩展开放,对修改关闭,即在添加新功能时不需要修改源代码,他人可以直接使用却不能进行修改。
开闭原则是为了使程序的扩展性更好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。
因为抽象的灵活性好,适应性广,只要抽象的合理,可以基本保持架构的稳定。当软件需要发生变化的时候,只需要重新派生一个实现类来扩展就行了。
里氏替换原则的主要思想是:继承必须确保超类所拥有的性质在子类中仍然成立。
里氏替换原则简单来说是使用父类或者接口类型来引用子类或接口的实现类。
里氏替换原则是多态的基础,即一个父类下有多重继承它的子类,那么则可以使用父类声明这些子类。它克服了继承中重写父类造成的可复用性变差的缺点,保证了正确性,类的扩展不会给已有的系统引入新的错误。
一个对象应该对其他对象保持最少的了解。通俗点来说就是:只与你的直接朋友交谈,不与“陌生人”说话。所以我们又称迪米特法则为最少知识原则
优点:降低类之间的耦合性,提高模块的相对独立性
缺点:过渡使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性
类不要承担太多的功能,职责要单一,即一个类只负责一项职责。
降低类的复杂性,提高程序的可读性,提高系统的可维护性,降低变更引起的风险。
通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级别上违反单一职责原则;只有类中方法数量足够少,才可以在方法级别上违反单一职责团泽;(建议不要违反单一职责原则)
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
也可以理解为接口要符合单一职责原则
高层模块不应该依赖底层模块,二者都应该依赖抽象
抽象不依赖于具体,具体依赖于抽象
中心思想是面向接口编程
原因:细节的东西往往是多变的,而越抽象则越稳定
依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置
如果处于代码复用的目的,则应该使用组合/聚合复用原则,而不要使用继承,也称合作复用原则。
组合/聚合原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过这些对象的委派达到复用已有功能的目的。
简单解释一下就是:组合和聚合指一个对象由多个对象组成,之间紧密联系,但是组合的组成对象中如果有某个对象出现问题了就可以再创建一个新的对象来代替原来的对象,而聚合不能