auto commit
This commit is contained in:
parent
3aca6a5dbe
commit
1e682a3ef2
|
@ -24,37 +24,60 @@
|
|||
|
||||
# S.O.L.I.D
|
||||
|
||||
S.O.L.I.D 是面向对象设计和编程 (OOD&OOP) 中几个重要编码原则 (Programming Priciple) 的首字母缩写。
|
||||
> [Design Principles](http://www.oodesign.com/design-principles.html)
|
||||
|
||||
| 简写 | 全拼 | 中文翻译 |
|
||||
设计原则可以帮助我们避免那些糟糕的设计,这些原则被归纳在《敏捷软件开发:原则、模式与实践》
|
||||
|
||||
| 简写 | 全拼 | 中文翻译 |
|
||||
| -- | -- | -- |
|
||||
|SRP| The Single Responsibility Principle | 单一责任原则 |
|
||||
|OCP| The Open Closed Principle | 开放封闭原则 |
|
||||
|LSP| The Liskov Substitution Principle | 里氏替换原则 |
|
||||
|ISP| The Interface Segregation Principle | 接口分离原则 |
|
||||
|DIP| The Dependency Inversion Principle | 依赖倒置原则 |
|
||||
|
||||
| SRP | The Single Responsibility Principle | 单一责任原则 |
|
||||
| OCP | The Open Closed Principle | 开放封闭原则 |
|
||||
| LSP | The Liskov Substitution Principle | 里氏替换原则 |
|
||||
| ISP | The Interface Segregation Principle | 接口分离原则 |
|
||||
| DIP | The Dependency Inversion Principle | 依赖倒置原则 |
|
||||
|
||||
## 1. 单一责任原则
|
||||
|
||||
当需要修改某个类的时候原因有且只有一个。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。
|
||||
**修改一个类的原因应该只有一个。**
|
||||
|
||||
换句话说就是让一个类只负责一件事,当这个类需要做过多事情的时候,就需要分解这个类。
|
||||
|
||||
如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱这个类完成其它职责的能力。
|
||||
|
||||
## 2. 开放封闭原则
|
||||
|
||||
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
|
||||
**类应该对扩展开放,对修改关闭。**
|
||||
|
||||
扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码。
|
||||
|
||||
符合开闭原则最典型的设计模式是装饰者模式,它可以动态地将责任附加到对象上,而不用去修改类的代码。
|
||||
|
||||
## 3. 里氏替换原则
|
||||
|
||||
当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有 is-a 关系。
|
||||
**子类实例应该能够替换掉所有父类实例。**
|
||||
|
||||
继承是一种 IS-A 关系,子类需要能够当成父类来使用,并且需要比父类更特殊。
|
||||
|
||||
如果不满足这个原则,那么各个子类的行为上就会有很大差异,增加继承体系的复杂度。
|
||||
|
||||
## 4. 接口分离原则
|
||||
|
||||
不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。
|
||||
**不应该强迫客户依赖于它们不用的方法。**
|
||||
|
||||
因此使用多个专门的接口比使用单一的总接口总要好。
|
||||
|
||||
## 5. 依赖倒置原则
|
||||
|
||||
1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
|
||||
2. 抽象不应该依赖于细节,细节应该依赖于抽象
|
||||
**1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象**
|
||||
**2. 抽象不应该依赖于细节,细节应该依赖于抽象**
|
||||
|
||||
高层模块包含一个应用程序中重要的策略选择和业务模块,如果高层模块依赖于底层模块,那么底层模块的改动就会直接影响到高层模块,从而迫使高层模块也需要改动。
|
||||
|
||||
依赖于抽象意味着:
|
||||
|
||||
- 任何变量都不应该持有一个指向具体类的指针或者引用;
|
||||
- 任何类都不应该从具体类派生;
|
||||
- 任何方法都不应该覆写它的任何基类中的已经实现的方法。
|
||||
|
||||
# 其他常见原则
|
||||
|
||||
|
@ -62,9 +85,9 @@ S.O.L.I.D 是面向对象设计和编程 (OOD&OOP) 中几个重要编码原则 (
|
|||
|
||||
| 简写 | 全拼 | 中文翻译 |
|
||||
| -- | -- | -- |
|
||||
|LoD| The Law of Demeter | 迪米特法则 |
|
||||
|CRP| The Composite Reuse Principle | 合成复用原则 |
|
||||
|CCP| The Common Closure Principle | 共同封闭原则 |
|
||||
|LoD| The Law of Demeter | 迪米特法则 |
|
||||
|CRP| The Composite Reuse Principle | 合成复用原则 |
|
||||
|CCP| The Common Closure Principle | 共同封闭原则 |
|
||||
|SAP| The Stable Abstractions Principle | 稳定抽象原则 |
|
||||
|SDP| The Stable Dependencies Principle | 稳定依赖原则 |
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user