设计模式

HeadFirst设计模式

花了一周时间把这本书读完了,感觉受益良多。其中有几个模式让我感觉相见恨晚,之前有几个项目场景如果能结合设计模式来实现,应该能节省很多维护的工作。还有其他几种设计模式,并没有感觉到它们的威力。另外,各个设计模式之间的差异也让我有点绕不出来,这个只能靠以后慢慢理清了。

模式是什么?

书中提到: 模式是在某情景下,针对某问题的某种解决方案。

  • 情景(情景)
  • 问题(需求)
  • 解决方案(模式)

举个例子:

情景-我要准时上班 问题-我将钥匙锁在车里了 解决方案1-打破窗户,进入车内,启动引擎,然后开车上班

设计模式是什么?

设计模式在模式的基础上,还包括了适用性,即最佳实践。

上述的例子,打破窗户虽然是一种解决方案,但是没有解决成本约束,可能不是一个很好的解决方案。

为什么要学习设计模式?

设计模式虽然不是原则,更不是法律,但是它提供了一种指导方针。

我最近几个月一直在纠结一个问题,如何才能写出优秀甚至完美的代码?之前的很多项目代码,我觉得用另外一种结构也可以实现,但是我不知道哪种选择才是最正确的,甚至我一度认为之前的代码都是垃圾代码。

了解了设计模式之后,我找到了一些答案。目前我现在认为在当前情境下,满足以下三个条件,就是优秀的代码

  • 条理清晰
  • 易于维护
  • 方便扩展

至于完美的代码,当然存在,但是只有极少情况下才会出现:需求不会再更改了。

从这个角度上来说,fmt.Pritln("Hello World")"也算是一句”完美”代码了 -_-

如何学习设计模式?

“反设计模式” vs 设计模式

没有对比就没有伤害,针对遇到的问题,思考一些”反设计模式”,然后与设计模式做对比

设计模式 vs 设计模式

同一个问题,既能抽象工厂模式能解决,也能使用模版方法解决。横向对比设计模式之间的差异

发掘开源项目中的设计模式

我在读这本书的时候,读到观察者模式会想到nsq,读到模版方法会想到beego controller的设计,读到工厂方法会想到jaeger中初始化存储组件的代码,读到go-redis客户端代码会想到命令模式。

优秀的开源项目肯定包含了大量的设计模式,以后阅读的时候可以好好品味。

写在最后

毕业两年半,来到新公司已经半年了,博客也停更半年了。接下来的2018希望能更认真的对待博客~