设计模式循序渐进(基础篇2)模式编程法则
1、开闭法则(OCP)
开闭法则(Open Closed Principle, OCP):软件实体(模块)应该易于扩展(开放),但免于修改(关闭)。
2、Liskov代换法则(LSP)
Liskov代换法则(Liskov Substitution Principle, LSP)派生类应该可以用其基类代换。
3、依赖反转法则(DIP)
依赖反转法则(Dependency Inversion Principle, DIP):依赖抽象而不依赖具体。
4、接口隔离法则(ISP)
接口隔离法则(Interface Segregation Principle, ISP):不应该强迫客户端依赖于他们用不上的方法。
5、单一职责法则(SRP)
单一职责法则(Single-Responsibility Principle, SRP):一个类应该仅有一个原因导致其变化。
http://www.zhangsk.cn/
刚刚在网上找到了一个比较不错的解释:
“开-闭”原则
一个软件实体应当对扩展开放,对修改关闭。当需求改变时我们可以对模块进行扩展,使其具有新的功能对更改是封闭的,对模块扩展时,不需要改动原来的代码面对抽象而不是面对细节,抽象比细节活的更长僵化的设计——如果程序中一处改动产生连锁反应。
里氏代换原则
任何积累可以出现的地方,子类一定可以出现。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤是抽象化,而积累与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
依赖倒转原则
要依赖于抽象,不要依赖于实现。看上去依赖倒转原则与“开-闭”原则有很大的相似指出,实际上,它们之间的关系是目标和手段之间的关系。“开-闭”原则是目标,而达到这一目标的手段是依赖倒转原则。
合成/聚合复用原则
要尽量使用合成/聚合,而不是集成关系达到复用的目的。显然,合成/聚合复用原则使与里氏代换原则相辅相成的,两者又都是对实现“开-闭”原则具体步骤的规范。前者要求设计师首先考虑合成/聚合关系,后者要求在使用集成关系时,必须确定这个关系是符合一定条件的。
迪米特法则
一个软件实体应当与尽可能少的其他实体发生相互作用。当一个系统面临功能扩展的时候,其中会有一些模块,它们需要修改的压力比其他一些模块要大。最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪种情况,如果这些模块是相对孤立的,那么它们就不会将修改的压力传递给其他的模块。
接口隔离原则
应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。显然,接口隔离原则与广义的迪米特法则都是对一个软件实体与其他的软件实体的通信限制。广义的迪米特法则要求尽可能的限制通信的宽度和深度。接口隔离原则所限制的是通信的宽度,也就是说,通信应当尽可能地窄。显然,遵守接口隔离原则与迪米特法则,会使一个软件系统在功能扩展地过程种,不会将修改地压力传递到其他的对象。