公司部门今年有个一年一本书计划,我就选了之前买的《JavaScript设计模式与开发实践》,心想着借这个机会学习一下设计模式,提升自己的编程效率和代码质量。
为什么要学设计模式
作为一个入行才一年多的新人,之前工作时总有这种感觉,面对一些没遇到问题,脑子里空荡荡,没有一点思路或者可参考的经验,所以想学习一些编程套路,在面对一些没遇到的问题时好有个参考。因为工作中遇到的一个问题,才意识到设计模式就是那些编程套路(之前一直以为是很高深的东西):
在前公司用angular2写网站的时候,遇到过这么个问题:用户首页地区切换后要将切换区域代码传到不同的页面/组件,由于不知道什么时候切换,不能用定时器,用angular的钩子函数极其耗性能不现实,在一番焦头烂额后发现了rxjs这个神器,欣喜若狂(后来换成了ngrx,因为rxjs不能存状态值),在啃rxjs时知道了它本质上是观察者模式的一种实现(观察者模式的两大应用之一---异步编程),于是就有了学设计模式的念头。
我的理解模式就像是套路,剑客的招式,当你对招式的无比熟练的时候,面对手(问题/需求)就能见招拆招,轻松应对,如果你对招式又有着无比深刻的理解,那你就能达到一种化境,这些招式就会融入你的骨髓,达到人剑合一天下无敌的水准。希望自己最终能达到人剑合一的境界。
什么是设计模式
标准答案:设计模式是面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。通俗的讲就是在某些场合下对某个问题的解决方案,总共有23种,这本书针对JavaScript的特性,介绍了其中的16种。
关于设计模式,其实并非软件开发的专业术语,实际上,‘模式’一词诞生于建筑学。20世纪70年代,哈佛大学的一个建筑学博士和他的团队花了大约20年的时间,研究了为解决同一问题而设计出的不同建筑结构,从中发现了那些高质量设计中的相似性,并且用‘模式’来指代这些相似性.
受这位博士的启发 Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides四个人(人称Gang Of Four ,GoF)将面向对象设计中最有价值的经验实践归纳总结,并给予了他们一个好听的名字,就形成了23种常见的软件设计模式,录入《设计模式:可复用面向对象软件的基础》一书。
设计模式的适用性
所有设计模式的实现都是遵循同一条原则--封装变化,即"找出程序中变化的部分,将变化封装起来"。这样的好处就是极大增强了代码的可复用、可维护性和可扩展性,代价也很明显:增加了了代码量,系统逻辑可能会更复杂。所以需要使用者根据特定的业务场景灵活运用,不能生搬硬套。
这基本就是针对 设计模式 这四个字的所有东西了,理解了什么是设计模式,为什么要学设计模式,后面就是具体学习了。