好处:将功能分类,模块划分明确,修改一个模块不会造成其他模块的修改,降低模块之间的耦合度
软件实体应该对功能的拓展开放,对修改关闭的原则
实现:
通过抽象类,及接口,定义功能。满足对修改关闭
通过新增实现类,满足对扩展开放
所有引用的基类的地方必须能够透明的使用其子类的对象
接口与其实现类的关系
比如LIst< > list = new ArrayList<>();
高层模块不应该依赖底层模块,两者都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象
好处:
采用依赖倒置原则可以降低模块之间的耦合性,提高系统的稳定性,减少并行开发的风险,提高代码的可读性和可维护性
应该尽量细化接口,接口的方法尽量少
好处:防止庞大,臃肿的接口,避免接口污染,一旦出现接口污染,会造成实现类中存在大量的不相关不需要去重写的方法
设计对象时,尽可能少的与其他对象发生相互作用,降低耦合
尽量使用对象组合,而不是继承来达到复用的目的
合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的。简言之:要尽量使用组合/聚合关系,少用继承。