前言
我们如何才能用java基础知识提高实际生产力?是的,有的人会认为我们学了这么多操作系统、网络协议、编译原理等,我们用在了哪里?仅仅是为了面试过关吗?确实,这些基础知识很难直接提高我们工作效率,当设计全新的项目体系结构、解决大数据高并发性业务 bug、总结经验教训时,它们从根本上提高了我们对技术的理解和认知。那么有没有能直接提高我们开发能力,能让我们写出可扩展、可读、可维护的高质量的代码的基础知识?有,它就是设计模式,它在哪些方面帮助我们提高开发能力呢?
1. 面试中的设计模式问题
不管你是前端工程师、后端工程师、客户端工程师,在求职面试中不可避免遇到设计模式方面的问题,特别是比较重视求职者基本功的大厂。如果不想在设计模式方面发挥失误,丢掉心仪公司的 offer,设计模式就是横在我们面前的拦路虎,闯过后面试再遇到设计模式相关的问题就会成为面试中的加分项。
2. 告别烂代码
代码是程序员的名片,代码能力是展示程序员基础素养的最直接衡量标准。
我们见过太多的烂代码,命名不规范、类设计不合理、分层不清晰、没有模块化概念、代码结构混乱、高度耦合等等。这样的代码维护起来非常费劲,添加或者修改一个功能,常常会牵一发而动全身,让你无从下手,恨不得将全部的代码删掉重写!
学好设计模式能让我们告别被人诟病的烂代码,写出令人称道的好代码,成为团队中的代码标杆。写出一份漂亮代码,自己也有成就感。
3. 提高设计和开发复杂代码的能力
我们每天的工作大部分都在根据业务需求在框架里填充业务代码,不需要我们从头设计,只要能把理解业务翻译成代码。
当我们面对稍微复杂的代码设计是否被不知从何下手,我们能够完成业务功能,但是想写出易扩展、易用、易维护的代码,需要我们深入理解设计模式。
如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接 new 出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?
我们要刻意锻炼、积累设计模式的知识,面对复杂代码、功能、系统的设计和开发,才能得心应手,游刃有余。
4. 事半功倍读源码
优秀的开源项目、框架、中间件,代码量、类的个数都会比较多,类结构、类之间的关系极其复杂,常常调用来调用去。所以,为了保证代码的扩展性、灵活性、可维护性等,代码中会使用到很多设计模式、设计原则或者设计思想。如果你不懂这些设计模式、原则、思想,在看代码的时候,你可能就会琢磨不透作者的设计思路,对于一些很明显的设计思路,你可能要花费很多时间才能参悟。相反,如果你对设计模式、原则、思想非常了解,一眼就能参透作者的设计思路、设计初衷。
因此,学好设计模式相关的知识,不仅能让你更轻松地读懂开源项目,还能更深入地参透里面的技术精髓,做到事半功倍。
5. 为你的职场发展做铺垫
普通的、低级别的开发工程师,只需要把框架、开发工具、编程语言用熟练,基本上就能应付平时的开发工作了。但是,如果你不想一辈子做一个低级的码农,想成长为技术专家、大牛、技术 leader,希望在职场有更高的成就、更好的发展,那就要重视基本功的训练、基础知识的积累。
代码质量低还会导致线上 bug 频发,排查困难。整个团队都陷在成天修改无意义的低级 bug、在烂代码中添补丁的事情中。而一个设计良好、易维护的系统,可以解放我们的时间,让我们做些更加有意义、更能提高自己和团队能力的事情。