HeadFirst设计模式
花了一周时间把这本书读完了,感觉受益良多。其中有几个模式让我感觉相见恨晚,之前有几个项目场景如果能结合设计模式来实现,应该能节省很多维护的工作。还有其他几种设计模式,并没有感觉到它们的威力。另外,各个设计模式之间的差异也让我有点绕不出来,这个只能靠以后慢慢理清了。
模式是什么?
书中提到: 模式是在某情景下,针对某问题的某种解决方案。
- 情景(情景)
- 问题(需求)
- 解决方案(模式)
举个例子:
情景-我要准时上班 问题-我将钥匙锁在车里了 解决方案1-打破窗户,进入车内,启动引擎,然后开车上班
设计模式是什么?
设计模式在模式的基础上,还包括了适用性,即最佳实践。
上述的例子,打破窗户虽然是一种解决方案,但是没有解决成本约束,可能不是一个很好的解决方案。
为什么要学习设计模式?
设计模式虽然不是原则,更不是法律,但是它提供了一种指导方针。
我最近几个月一直在纠结一个问题,如何才能写出优秀甚至完美的代码?之前的很多项目代码,我觉得用另外一种结构也可以实现,但是我不知道哪种选择才是最正确的,甚至我一度认为之前的代码都是垃圾代码。
了解了设计模式之后,我找到了一些答案。目前我现在认为在当前情境下,满足以下三个条件,就是优秀的代码
- 条理清晰
- 易于维护
- 方便扩展
至于完美的代码,当然存在,但是只有极少情况下才会出现:需求不会再更改了。
从这个角度上来说,fmt.Pritln("Hello World")"
也算是一句”完美”代码了 -_-
如何学习设计模式?
“反设计模式” vs 设计模式
没有对比就没有伤害,针对遇到的问题,思考一些”反设计模式”,然后与设计模式做对比
设计模式 vs 设计模式
同一个问题,既能抽象工厂模式能解决,也能使用模版方法解决。横向对比设计模式之间的差异
发掘开源项目中的设计模式
我在读这本书的时候,读到观察者模式会想到nsq,读到模版方法会想到beego controller的设计,读到工厂方法会想到jaeger中初始化存储组件的代码,读到go-redis客户端代码会想到命令模式。
优秀的开源项目肯定包含了大量的设计模式,以后阅读的时候可以好好品味。
写在最后
毕业两年半,来到新公司已经半年了,博客也停更半年了。接下来的2018希望能更认真的对待博客~