SOLID 设计原则
开闭原则和里氏替换原则是设计目标;单一职责原则、接口分割原则和依赖倒置原则是设计方法。
Single Responsibility Principle(SRP): 单一职责原则
SRP 要求每个软件模块职责要单一,衡量标准是模块是否只有一个被修改的原因。职责越单一,被修改的原因就越少,模块的内聚性 (Cohesion) 就越高,被复用的可能性就越大,也更容易被理解。
Open Close Principle(OCP): 开闭原则
软件实体应该对扩展开放,对修改关闭。
设计模式中例如:
装饰者模式
可以在不改变被装饰对象的情况下,通过包装 (Wrap) 一个新类来扩展功能。策略模式
通过制定一个策略接口,让不同的策略实现成为可能。适配器模式
在不改变原有类的基础上,让其适配 (Adapt) 新的功能。观察者模式
可以灵活地添加或删除观察者 (Listener) 来扩展系统的功能。
Liskov Substitution Principle(LSP): 里氏替换原则
程序中的父类型都应该可以正确地被子类型替换。
根据 LSP 的定义,如果在程序中出现使用 instanceof、强制类型转换或者函数覆盖,很可能意味着是对 LSP 的破坏。
Interface Segregation Principle(ISP): 接口隔离原则
接口隔离原则认为不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。
满足 ISP 之后,最大的好处是可以将外部依赖减到最少。你只需要依赖你需要的东西,这样可以降低模块之间的耦合(Couple)。Dependency Inversion Principle(DIP): 依赖倒置原则
依赖倒置,就是要反转依赖的方向,让原来紧耦合的依赖关系得以解耦,这样依赖方和被依赖方都有更高得灵活度。
DIP 要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。
其他原则
DRY
DRY(Don`t Repeat Yourself)原则特指在程序设计和计算中避免重复代码,因为这样会降低代码得灵活性和简洁性,并且可能导致代码之间的矛盾。
YAGNI
YAGNI(You Ain`t Gonna Need It)是正对大设计提出来的,是”极限编程”提倡的原则,是指你自以为有用的功能,实际上都是用不到的。因此,除了核心的功能之外,其他的功能一概不要提前设计。
Rule of Three
Rule of Three 也被称为”三次原则”, 是指当某个功能第三次出现时,就有必要进行”抽象化”了。
KISS
KISS(Keep It Simple and Stupid)好的目标不是越复杂越好,反而时越简洁越好。
POLA
POLA(Principle of least astonishment)是最小惊奇原则,写代码不是写侦探小说,要的是简单易懂,而不是时不时冒出个”Surprise”。