红米手机|为什么说每个程序员都要尽早掌握设计模式相关知识?( 二 )


当然 , 在这些年的工作经历中 , 我也看到过很多让我眼前一亮的代码 。 每当我看到这样的好代码 , 都会立刻对作者产生无比的好感和认可 。 且不管这个人处在公司的何种级别 , 从代码就能看出 , 他是一个基础扎实的高潜员工 , 值得培养 , 前途无量!因此 , 代码写得好 , 能让你在团队中脱颖而出 。
所以 , 我的专栏 , 不仅仅只是讲解设计模式 , 更加重要的是 , 我会通过实战例子 , 手把手教你如何避免刚刚提到的代码问题 , 告别被人诟病的烂代码 , 写出令人称道的好代码 , 成为团队中的代码标杆!而且 , 写出一份漂亮的代码 , 你自己也会很有成就感 。
3. 提高复杂代码的设计和开发能力大部分工程师比较熟悉的都是编程语言、工具、框架这些东西 , 因为每天的工作就是在框架里根据业务需求 , 填充代码 。 实际上 , 我刚工作的时候 , 也是做这类事情 。 相对来说 , 这样的工作并不需要你具备很强的代码设计能力 , 只要单纯地能理解业务 , 翻译成代码就可以了 。
但是 , 有一天 , 我的leader让我开发一个跟业务无关的比较通用的功能模块 , 面对这样稍微复杂的代码设计和开发 , 我就发现我有点力不从心 , 不知从何下手了 。 因为我知道只是完成功能、代码能用 , 可能并不复杂 , 但是要想写出易扩展、易用、易维护的代码 , 并不容易 。
如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接new出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?……各种问题 , 一下子挤到了我面前 。
而我当时并没有对设计模式相关的知识(包括设计模式、设计原则、面向对象设计思想等)有太多的了解和积累 , 所以一时间搞得我手足无措 。 好在因此我意识到了这方面知识的重要性 , 所以在之后很多年的开发中 , 我都一直刻意锻炼、积累这方面的能力 。 面对复杂代码、功能、系统的设计和开发 , 我也越来越得心应手 , 游刃有余 。 写出高质量代码已经成为了我的习惯 , 不经意间写出来的代码 , 都能作为同事学习、临摹的范例 , 这也成为了我职场中最引以为豪的亮点之一 。
4. 让读源码、学框架事半功倍对于一个有追求的程序员来说 , 对技术的积累 , 既要有广度 , 也要有深度 。 很多技术人早早就意识到了这一点 , 所以在学习框架、中间件的时候 , 都会抽空去研究研究原理 , 读一读源码 , 希望能在深度上有所积累 , 而不只是略知皮毛 , 会用而已 。
从我的经验和同事的反馈来看 , 有些人看源码的时候 , 经常会遇到看不懂、看不下去的问题 。 不知道你有没有遇到过这种情况?实际上 , 这个问题的原因很简单 , 那就是你积累的基本功还不够 , 你的能力还不足以看懂这些代码 。 为什么我会这么说呢?
优秀的开源项目、框架、中间件 , 代码量、类的个数都会比较多 , 类结构、类之间的关系极其复杂 , 常常调用来调用去 。 所以 , 为了保证代码的扩展性、灵活性、可维护性等 , 代码中会使用到很多设计模式、设计原则或者设计思想 。 如果你不懂这些设计模式、原则、思想 , 在看代码的时候 , 你可能就会琢磨不透作者的设计思路 , 对于一些很明显的设计思路 , 你可能要花费很多时间才能参悟 。 相反 , 如果你对设计模式、原则、思想非常了解 , 一眼就能参透作者的设计思路、设计初衷 , 很快就可以把脑容量释放出来 , 重点思考其他问题 , 代码读起来就会变得轻松了 。