应该有且仅有一个原因引起类的变更。
1 类的复杂性降低,实现什么职责都有清晰明确的定义; 2 可读性提高; 3 可维护性提高; 3 变更引起的风险降低; 注意 单一职责原则提出了一个编写程序的标准,用 “职责” 或 “变化原因” 来衡量接口或类设计得是否优良,但是 “职责” 和 “变化原因” 都是不可度量的,因项目而异,因环境而异。
对于接口,在设计时一定要做到单一,实现类要多方面考虑
只要父类能出现的地方子类就可以出现,而且替换成子类也不会产生任何错误或异常。 注意 覆写或实现父类的方法时输出结果可以被缩小 父类的一个方法的返回值是一个类型T,子类的相同方法(重载或覆写)的返回值为S,那么里氏替换原则就要求S必须小于等于T。
如果是覆写:父类和子类的同名方法的输入参数是相同的,两个方法的范围值S小于等于T。 如果是重载:则要求方法的输入参数和数量不相同,在里氏替换原则的要求下,就是子类的输入参数要宽于或等于父类的输入参数,也就是说子类的该方法是不会被调用的。
依赖倒置即遵循以下规则: 1 模块间的依赖通过抽象发生,生成类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的; 2 接口或抽象类不依赖于实现类 3 实现类依赖接口或抽象类
1 构造函数传递依赖对象 2 Setter方法传递依赖对象 3 接口生命依赖对象 注意:如果基类是一个抽象类,而且这个方法已经实现了,子类尽量不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖稳定性会产生一定影响。
把一个臃肿的接口变更为多个独立的接口所依赖的原则就是接口隔离原则。
注意: 1 接口要尽量小,但根据接口隔离原则拆分接口时,首先必须满足单一职责原则。 2 接口要高内聚 什么是高内聚? 高内聚就是提高接口、类、模块的处理能力,减少对外的交互。 3 系统之间或模块之间的定制服务需接口隔离,防止接口误调。
也称知道最少原则,一个类应该对自己耦合或调用的类知道的最少,不关心其内部实现,只关注调用的方法。 注意: 1 只和朋友类(出现在成员变量或方法的输入输出参数中的类)交流 2 设计时需衡量是否可以再减少public方法和属性。 3 如果一个方法放在本类中,既不增加类间关系,也对类本身不产生负面影响,那就放置在本类中。 4 谨慎使用Serializable
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。 应用注意事项: 1 抽象约束 不允许出现接口或抽象类中不存在的public方法; 2 元数据(用来描述环境和数据的数据,即配置参数)控制模块行为 3 制定项目章程 4 封装变化
