面向对象的设计原则
学习设计模式之前,有必要了解面向对象的**SOLID** 5 大设计原则:
| 名称 | 缩写 | 含义 |
|---|---|---|
| Single Responsibility Principle 单一职责 |
S | 对象应该具有单一的职责。这也是 Unix 的设计哲学 |
| Open/Closed Principle 开/闭原则 |
O | 对扩展开放,对修改关闭 |
| Liskov Substitution Principle 里氏替换 |
L | 对象应该可以在不破坏系统的情况下被子对象替换 |
| Interface Segregation Principle 接口隔离 |
I | 不应强迫任何客户端依赖其不使用的方法 |
| Dependency Inversion Principle 依赖倒转 |
D | 高级模块不应依赖于低级实现 |
除了 **SOLID** 5 大设计原则,一些书上可能还会提到下面的设计原则:
- 合成/聚合复用原则(Composite/Aggregate Reuse Principle):尽量使用合成/聚合,而不要使用继承。这也是 Go 语言设计遵循的,基于此,Go 中没有继承。
- 迪米特法则(LoD),又叫 最少知识原则:一个对象应当对其他对象有尽可能少的了解;一个软件实体应当与尽可能少的其他实体发生相互作用;也就是降低耦合。
设计模式分类
一般来说,设计模式分为三大类:
创建型模式:对对象的实例化过程进行抽象,这使得一个系统可以不用关心这些对象是如何创建,组合,呈现的,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理来实例化所需要的对象。 结构型模式:通过对多个类和对象进行组合得到复杂结构的类,一般使用继承或者成员变量引用形式来实现。 行为型模式:行为模式不仅表达了对象和类,还表达了他们之间的交互,涉及到了对象和算法的分配。
创建型模式(5种)
结构型模式(7种)
行为型模式(11种)
