所谓模式
所谓模式
要说将设计模式发扬光大的语言还得是Java,虽然本质上来说,设计模式是一门语言无关的学问,但几乎所有设计模式的教学语言都是用的是Java,毫无疑问Java是使用设计模式最多的语言,因为它是一个很典型的面向对象的语言,万物皆对象,很显然设计模式就是面向对象的,这是一个优点也是一个缺点,因为有时候过度设计同样会造成难以维护的问题。设计模式起源于建筑工程行业而非计算机行业,它并不像算法一样是经过严谨缜密的逻辑推算出来的,而是经过不断的实践与测试总结出来的经验。使用设计模式是为了代码重用性更好,更容易被他人理解,以及更好维护的代码结构。
对于Go而言,也很有学习设计模式的必要,不过需要注意的是,并不是任何时候都需要设计模式,设计模式本就是前人总结的经验,也会有不适用的时候,这些需要自行判断,拒绝言必设计模式。学习设计模式是为了提升编码水平,而不是限制我们的思想。
提示
Go本身是没有类的说法,与之相似的只有结构体,但是Go又是一门比较偏向于面向对象的语言,所以往后所称的类都是在指接口或结构体。
类型
设计模式中总共有6大原则,23种设计模式。设计模式大概可分为三类:创建型,结构型,行为型。
类型 | 模式 |
---|---|
创建型 | 工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式 |
结构型 | 适配器模式,桥接模式,过滤器模式,组合模式,装饰器模式,外观模式,享元模式,代理模式 |
行为型 | 责任链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,空对象模式,策略模式,模板模式,访问者模式 |
原则
6大原则分别是:
- 开闭原则
- 单一职责原则
- 里氏替换原则
- 依赖倒转原则
- 接口隔离原则
- 迪米特法则
- 合成复用原则
提示
设计模式这种东西光看介绍是看不懂的,背下来也没用,因为本就是实践才出来东西,不亲自敲一遍是不知道到底是个怎么回事,而且一千个人有一千个写法,例如在本站的设计模式看不懂,说不定去看看其他人的实现就豁然开朗了。顺便提醒一下,如果带着纯粹的面向对象的眼光去看待和学习Go语言,将会十分的痛苦与折磨,Go抛弃了类和继承的概念,对于习惯了Java这类语言的程序员来说是十分不友好的。
本章借鉴了:senghoo/golang-design-pattern: 设计模式 Golang实现-《研磨设计模式》读书笔记 (github.com)