废话启文
记得当初刚工作时, 那时还是主要搞后台, 在一家对日外包公司. 天天敲者简单的逻辑, 记得有一次跟 boss 聊天. 说老板我们公司有没有需要用点高深算法的项目让我去研究研究. 老板愣了一下, 为啥. 我说我是数学出身嘛, 干点能体现价值的活(当时太年轻, 眼高手低啊, 惭愧). 老板说我们外包公司哪有什么高深算法, 你要没事干, 去看看设计模式.
说起设计模式我也不是头一次从这个老板嘴里听到的, 毕业时, 各种面试中, 经常有道题, 让你写写单例模式. 听了老板的话, 然后去找设计模式的资料. 百度, 看了一篇大致叫3k 与 30k 的区别, 大牛不会告诉小菜的秘密这么一篇文章, 正是开启我学设计模式之路.
当时先找的教学视频. 有的效果很差的, 也坚持听了下来. 最可气的是声音和画面对不上的. 马士兵还不错, 可惜就是不全啊, 明明 23 种设计模式, 好几种还没讲. 感觉就像去下个完结小说看到最后却发现不是全本那种感觉. 后来开始看设计模式相关书籍. 这些书籍和文章一般都是一种语言来写的, 有的用 java, 有的用 c#, 有的用 c++, 也有少数同时用两种语言来写的. 有国外有国人的, 什么道法自然, 什么禅那, 印象比较深的是以大牛和小菜对话形式开展那本书. 这本我是坚持看完了. 由于当时对面向对象多态理解不透, 很容易看不下去(这里多说一句, 为啥很少有人在 js 中讨论多态现象, 面向对象三大特征, 人们经常只说继承呢? 原因很简单, js 中函数都能参数传, 也能当返回值, 而且我是脚本语言, 本身就是动态执行, 还讨论个毛线, 嘿嘿). 其他的书基本就是只看几个主题就拉到了. 后来有很长时间再没去动它了. 直到再后来转前端了. 买的第一本 js 书也是设计模式.
说了这么多, 肯定有些同学还不知道设计模式是啥, 在我们前端有啥用呢. 我写这篇文章不是告诉设计模式的定义, 更不会从啥是模式讲起. 只是希望大家花点时间去研究研究它. 很有用的.
那啥是设计模式呢, 打个比方说, 我们写个 tab 插件啊, 写个轮播啥的, 在武功学上讲, 那就是招式, 用风清扬老前辈的话来说你不仅要修炼剑招, 还要修炼剑意. 而这个设计模式就是武学流派 (比如 js 和 java) 中的无上心法. 而工作经验只是心法修炼到第几层的一种体现方式罢了. 而最高的境界就是无招胜有招(独孤九剑).
不提那些玄的, 记得上家单位, 做一个项目, 说是把各个厂商的摄像头兼容到一个平台上. 刚报道的第一天, 一个搞后台的给我们讲怎么怎么实现的(c++). 我问了一句后台用没用设计模式, 比如适配器模式. 他说没有. 后来他真的去改了. 想想就知道不同厂商各个功能大体相似, 但接口名称都不同, 如不用适配模式, 你要改点东西不得老费尽啦. 这里先大致说下, 设计模式一个主要功能就是为了应对需求变更以及功能拓展. 在代码上的体现就是做到高内聚低耦合.
其实不用看设计模式, 我们在写代码过程中不自觉用了某一种设计模式, 比如门面模式, 说到它, 想起了一句话, 每个使用起来很方便的 api, 后面都封装了一大段龌龊的逻辑啊. 竟然我们会不自觉的用, 为啥也要去学呢. 道理很简单, 肯定有你不曾想到的设计模式在里面. 以后写代码时, 有设计模式这个支撑看起来不优雅都很困难. 这时恐怕有人要说, 不要特意去套用某个设计模式. 仿佛很多人都会拿这句话, 来作为自己不懂设计模式一个堂而皇之的借口. 就像很多人看闭包一样, 只记住了闭包会占用内存, 不要轻易用一个道理一样. 事实是啥呢, 我们可能随便写点代码不自觉的写个闭包出来了. 开毛玩笑, 该占用内存还得占, 如果你能确定后面不在使用释放引用就行了. 设计模式也是同一个道理, 你不去研究它. 谈何说起套用, 要无招胜有招的境界, 那正是因为研究透了.
设计模式也有教学视频的, 白鹤翔的教学视频(郑重推荐给初学者, 真得很好, 我没事也翻出来两集看看). 书籍也有的, 比如 javascript 设计模式(有两本老外的, 都下来看看, 风格不太一样), 如果你不想全看也行, 但是一定要看发布订阅模式. 因为 js 是事件机制驱动的语言. 在这里用发布定义模式真的再好不过了, 真正做到代码解耦. 定义各种自定义事件啊. 用起来真的很舒服.
最后我再说一句, 我写此文, 一句代码也没有, 只是希望初学者, 作为个 JSer, 心里要有个数, 以后想往深的走, 这个东西必须懂. 还有我也是与其昏昏, 使其昭昭罢了.
本文完.
来源: http://www.qdfuns.com/article/17398/a5231c7498bda52b60ee09f305342596.html