总原则:开闭原则
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。
一,单一职责原则
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责.
举例:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。
遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。
二,里氏替换原则
定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
例:在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
子类中可以增加自己特有的方法。
当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
三,依赖倒转原则
定义:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
四,接口隔离原则
定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
例:比如一个接口里面有5个方法,有类A和类B,类A在业务上用到了接口中的2个方法,类B用到了其中的3个方法,A和B都去实现接口中的5个方法,这时候有些接口中的方法用不到,所以应该使用接口隔离,把这个接口拆分成2个接口。
五,迪米特法则(最少知道原则)
定义:一个软件实体应当尽可能少地与其他实体发生相互作用。
类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
尽量降低类与类之间的耦合。
六,合成复用原则
合成复用原则是指尽量使用合成/聚合,而不是使用继承。
个人理解,合成复用相当于装饰模式一说。