From 1e682a3ef2b4f1e6b223c205972153fbe5bb5df0 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 13 Mar 2018 23:33:49 +0800 Subject: [PATCH] auto commit --- notes/面向对象思想.md | 57 ++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/notes/面向对象思想.md b/notes/面向对象思想.md index d079bb2c..ebf4c65d 100644 --- a/notes/面向对象思想.md +++ b/notes/面向对象思想.md @@ -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 | 稳定依赖原则 |