前言

其实对于设计模式,我早早在大学的时候就啃过《Head First 设计模式》《大话设计模式》。当时虽然对于设计模式本身的使用不够,但对于为什么会有设计模式已经设计模式的意义已经深入人心。

当年写的博客:你所学习的设计模式到底有什么用?到底怎么用? (现在看来还有点羞耻,当年大学的我居然是这样的我)

转到当下,其实在实际的工作中都是一种潜移默化的影响,有时候我真的没有意识到这是某种设计模式,而我会这样去编写我的代码。

本书的优点

以 go 语言去实现了各种设计模式,去讲述了各种设计模式,有一说一,从一个初学者的角度它是 OK 的,常用的设计模式均有涉及。对我来说复习了一遍,加深了印象。对于设计模式其中具体的示例代码来说对于小白来说是友好的,这些案例我在网上也常见到,特别看到访问者模式的“圆形”“正方形”的时候。不过从我的角度来说,其实我更希望看到的案例是,直接那 K8S 源码里面的的访问者模式来说明,比如 JSON 格式和 YAML 格式的访问等等。当然作者肯定有自己的考虑,如果这种案例其实需要读者对于这些开源框架有一定的基础,否则直接上来读,这样的案例不够容易上手模仿。

可以改进的点

个人觉得其实不应该在设计模式这本书里面放入有关架构设计的内容,比如加入 DDD 在里面,一方面是由于篇幅的限制,很多 DDD 都是一整本书来讲述的,另一方面就感觉有点格格不入,感觉有点在为了凑字数(当然我知道出版书籍是有页数字数要求的)但我觉得可以从设计模式本身去入手,深挖下去会更加贴近书名。

所以本书我更推荐给没有学习过设计模式,但正好在使用 Golang 语言开发的同学。

Go 常用设计模式

对于 Go 语言使用设计模式本身,我个人也有些认识。每种语言都有自己的特点和特性,go 没有继承势必在某些设计模式的实现上并非优雅;但由于 go 函数是一等公民,在某些设计模式中也有自己的风格。所以我就举例说明几个我最常用,也在 go 中最常见的设计模式:

  1. Option 函数式设计模式:将额外的参数作为 Option 从而扩展方法的功能,且 Option 本身是个函数的方式。
  2. Builder 模式:其实之前在 java 的 Lombok 的@Builder 很让我觉得难受,但当这样的实现人为的手动去控制之后就显得好了很多。并且类似的方式用在 task 的处理上还能减少 err != nil
  3. 装饰器模式:有一天,我愣是写了六个装饰器,可见统一是多么的重要。
  4. 适配器模式:经常封装第三方 SDK 方法的时候很常用。

总结

最后总结下吧,对于已经写了那么久代码的我来说,这次看完书之后,给我一种看山又是山看水又是水的感觉,最好的设计模式是什么:

  1. 抽象,并且记得开闭原则
  2. 减少重复代码
  3. 减少单个函数的代码行数
    记住这三点,然后忘记其他,几年后回过头你会发现,可能融会贯通之后,好代码的真谛也就这样。