主要是说对修改封闭,对拓展敞开,此原则应该是软件设计的目的,那么实现此原则,主要通过抽象来达到这个目的
接口隔离原理主张接口的粒度应该尽可能的小,如果接口的粒度太大了,导致很多类在实现其接口,也不得不实现其不需要的函数(方法)。
里氏替换原则一句话,就是说,凡是父类出现的地方,都可以用子类来替换,这里并不是说要父类用子类来替换,而是传达一个原则,那就是,子类不应该覆盖,重写父类的方法,从而导致父类,子类方法的语义有差别。就是要重写,也只能在父类方法语义范围内重写,比如,父类某方法要求参数的范围0-10,那么子类重写此方法时,也只可能在0-10范围内,或更苛刻而不是相反。
组合/聚合原则此原则主张优先利用组合/聚合来复用功能,而不是继承。至于组合与聚合的差别,都可以通过实例变量来做到,其他的区别就是组合是一个部分与整体的关系,整体管理着部分的生命周期,部分不能独立整体而存在,比如人与手,公司与部门;而聚合则不是,它们是一种合作的关系,部分可以独立于整体而存在,比如汽车与轮胎。而优先使用组合/聚合的原因,主要还是继承对于程序有更大的侵入性,比如,继承的父类发生了变化,那么势必影响所有的子类。组合/聚合则可以将这种变化限于某一个类中。
迪米特原则其实就是一个原则:低耦合,高内聚。那么如何做到呢,一个类应该这样做,如果可能,把类修改成final的,如果类不是final,那也应该尽量降低此类,此类中的成员变量,成员函数(方法)的访问权限,此外还需要慎用序列化(Serialble)
依赖倒置原则高层模块依赖底层模块,实现依赖与抽象而不是相反。spring以及其他IOC容器的朋友,我想对此原则应该不陌生。