单一职责
- 类 - BO 业务对象
- 类 - Biz 业务逻辑
- 职责变化不互相影响
- 接口或类的设计:是否会有多个变化原因
- 方法的颗粒度要细
- 方法职责要清晰,要单一,不能笼统
里氏替换
- 继承有侵入性,降低代码的灵活性,增强了耦合性
- 程序中子类对象可以替换为父类对象(声明时)
- 所有引用基类的地方必须能透明地使用其子类的对象(使用调用时)
- 子类必须完全实现父类的方法
- 子类可以有自己的个性
- 重载父类的方法时输入参数可以被放大
- 覆写或实现父类的方法时输出结果可以被缩小
依赖倒置
高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块
抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
- 抽象不应该依赖细节;
- 细节应该依赖抽象。
- 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备
- 变量的表面类型尽量是接口或者是抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类的方法
接口隔离
- 客户端不应该依赖它不需要的接口
- 类间的依赖关系应该建立在最小的接口上
- 一个臃肿的接口变更为两个独立的接口所依赖的原则就是接口隔离原则
- 接口要尽量小
- 接口要高内聚
- 接口设计是有限度的
迪米特法则
- 一个对象应该对其他对象有最少的了解
- 只与直接的朋友通信
- 朋友间也是有距离的(类自己的修改不会影响朋友类)
开闭原则
应尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来完成变化,它是为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则
- 通过扩展实现变化(保留原逻辑,通过继承类或接口来扩展-覆写)
- 开闭原则对测试的影响,(测试方法也对改变关闭)
- 开闭原则可以提高复用性
- 开闭原则可以提高可维护性
- 面向对象开发的要求
- 第一,将相同的变化封装到一个接口或抽象类中;第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中