第二部分 敏捷设计
什么是敏捷设计
单一职责原则(SRP)
就一个类而言,应该仅有一个引起它变化的原因
什么是职责:
- 在SRP中,我们把职责定义为“变化的原因”,如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。
开放-封闭原则(OCP)
软件实体(类,模块,函数)应该是可以扩展的,但是不可修改的
描述:
遵循开发-封闭原则设计出的模块具有两个主要的特征。
对于扩展是开发的 (open for extension)
- 我们可以改变模块的功能
对于更改是封闭的(Close for modification)
- 对模块的行为进行扩展,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,都无需改动
关键是抽象:
可以创建出固定能够描述一组任意个可能行为的抽象体。这个抽象体就是抽象基类。而这一组任意个可能的行为则表现为可能的派生类。
模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体。所以它对于更改可以是改变的。同时从这个抽象体派生,也可以扩展此模块的行为。
Liskov替换原则(LSP)
对于LSP的解释:
子类型(subtype)必须能够替换掉它们的基类型(base type)
依赖倒置原则(DIP)
高层模块不应该依赖于低层模块。二者都应该依赖于抽象
抽象不应该依赖于细节。细节应该依赖于抽象。
依赖于抽象:
1. 任何变量都不应该持有一个指向具体类的引用
2. 任何类都不应该从具体类从派生
3. 任何方法都不应该覆写它的任何基类中的已经实现了的方法。
如果一个具体类不太会改变。并且也不会创建其他类似的派生类,那么依赖于它并不会造成损害