一 组合复用原则
多用组合,少用继承
找到变化部分,抽象,封装变化 区分 “ Has-A ” 与 “ Is-A ”
二 依赖倒置原则
依赖:成员变量、方法参数、返回值要依赖于抽象,不要依赖于具体
高层模块不应该依赖低层模块,二者都应该依赖其抽象
抽象不应该依赖具体,具体应该依赖抽象
针对接口编程,不要针对实现编程
以抽象为基础搭建的结构比具体类搭建的结构要稳定的多
在java中,抽象指的是接口或者抽象类,具体就是具体的实现类
三 开闭原则
对扩展开放,对修改关闭
通过扩展已有软件系统,可以提供新的功能
修改的关闭,保证稳定性和延续性
四 里氏替换原则
所有引用基类的地方必须能透明地使用其子类对象
子类在扩展父类功能时不能破坏父类原有的功能
使用继承时,遵循里氏替换原则:
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
当子类重载父类方法时,方法的形参要比父类方法的参数更宽松
子类实现父类的抽象方法时,方法的返回值要比父类更严格
里氏替换原则是设计整个继承体系的原则
五 迪米特法则(最少知识原则)
一个对象应该与其他对象保持最少的了解。只与直接朋友交谈。
成员变量、方法参数、方法返回值中需要的类为直接朋友
类与类之间的关系越密切了解越多,耦合度越大
尽量降低类与类之间的耦合
外观模式、中介者模式
接口隔离原则:一个类对另-个类的依赖应该建立在最小的接口上
六 单一职责原则
类应该只有一个导致类变更的理由
即一个类只负责-项职责
降低类的复杂度
提高系统的可维护性
修改时降低风险溢出