软件设计原则
1 OCP(open - close Principle)
又叫"开-闭"原则,指的是在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换而言之,应当可以在不被修改的情况下改变模块的行为。
所有的软件系统都有一个共同的性质,即对他们的需求都是会随着时间的推移而发生变化,在软件系统面临新的需求时,系统的设计必须是稳定的,满足“开-闭”原则的设计可以给软件系统2个无可比拟的优越性:
- 通过扩展已有软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性 和灵活性。
- 已有的软件模型,特别是最终的抽象层模块,不能再被修改,这就使变化中的软件系统有一定的稳定性和 延续性。
体现:策略设计模式,桥梁设计模式
2 里氏代换原则
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。
里氏代换原则是对“开-闭”原则的补充,正如前面讲到的,实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系
就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步奏的规范。一般而言,违反里氏代换原则的,也一定违背“开-闭”原则。
3 依赖倒转原则
依赖倒转原则讲的是,要依赖于抽象,不要依赖于实现。看上去依赖原则与OCP原则有很大的相似之处,实际上,它们之间的关系
是目标和手段之间的关系。OCP原则是目标,而达到这一目标的手段是依赖倒转原则。
换言之,要实现OCP原则就应当坚持依赖倒转原则。违反依赖倒转原则就不可能达到OCP原则的要求。
4 合成/聚合复用原则
合成/聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能,
合成/聚合复用的原则是尽量使用合成/聚合,而不是使用继承关系达到复用的目的。
合成/聚合复用的原则是尽量使用合成/聚合,而不是使用继承关系达到复用的目的。
合成/聚合复用原则是与里氏代换原则相辅相成的,两者又都是对实现OCP原则的具体步骤的规范,前者要求设计师首先考虑
合成/聚合关系,后者要求在使用继承关系时,必须确定这个关系时符合一定条件的。
体现:装饰设计模式
5 迪米特法则
迪米特法则讲的是,一个软件实体应当尽可能少的与其他实体发生相互作用。也就是说应该降低各个模块之间的耦合度。
当一个系统面临功能扩展的时候,其中一些模块,他们可能需要修改的压力比其他模块要大,最后的结果可能是这些模块需要
最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪一种情况,如果这些模块是相互独立的,那么他们就不会将这些
修改的压力传递给其它的模块。
也就是说,一个遵守迪米特原则设计出来的 系统在功能需要扩展时,会相对容易的做到修改的关闭。也就是说,迪米特法则是一条通向OCP原则的道路。
6 接口隔离原则
接口隔离原则讲的是,应当为客户端提供尽可能小的单独接口,而不是提供大的总接口。显然,接口隔离原则与广义的迪米特法则都是对一个软件实体与其他软件实体的通信限制,广义的迪米特法则要求尽可能限制通信的宽度和深度。接口隔离原则所限制的是通信的宽度,也就是说,通信应当尽可能地窄。
显然遵循接口隔离原则和迪米特法则,会使一个软件系统在功能扩展的过程中,不会将修改的压力传递给其它的对象。