文章目录

  • 基本功
  • 如何学好设计模式
    • 对设计模式常见的误解
      • 误解一:经典模式太抽象,很难学下去
      • 误解二:设计模式太单一,复杂业务场景难落地
      • 误解三:模式既然很好用,那么一切皆模式
    • 如何正确学习设计模式


基本功

代码质量既是设计出来的,也是迭代优化出来的。换句话说,无论是前期的产品需求分析、架构设计,还是后期的详细代码设计与编码,都离不开良好的设计。

程序设计是每个程序员的基本功。但是,大多数人都只是对新技术充满热情,却很少有人愿意沉下心来,花几个月甚至一两年的时间来重温基础知识,修炼基本功。

在面对所谓“新技术”的浪潮下,一直看不透背后隐藏的朴实规律,只是东一榔头西一棒槌地在原地踏步。

当我真正亲身参与到编码实践和设计中后,才猛然发现设计模式的诸多优势,比如,提升源码阅读效率,快速解决短期项目中的问题,降低维护成本等。

而在不断学习与实践设计模式的过程中收获了很多实打实的经验,包括编程的技巧、架构设计的启发、面试技巧等


如何学好设计模式

有了学习设计模式的目标之后,还得找对学习设计模式的正确方法。

学习设计模式最有效的办法就是:主动学习+刻意练习

在实际工作中,很少有人告诉你一个程序该如何设计,他们只会要求有一个结果——做出一个好的程序并能运行起来。

面对这样的要求,你常常只能处于被动学习状态:任务里需要什么你才学习什么,东一榔头,西一棒槌。这样短期虽然有效,但是长期下来,你的知识积累速度其实很慢。所以,要想学好设计模式,你就得放弃这种被动学习的方式,要有目标、有系统地去主动学习:找寻好的资料,分析理解,开放思维

是不是还有以下疑惑?

  • 在面试中时常被问到设计模式,可实际工作中却很少使用;

  • 每个模式的样例代码都很熟悉,实际编码时却总感觉力不从心,实现困难;

  • 很多系统设计看上去和很多模式都很像,却不知道到底该用一个模式,还是多个模式;

  • 设计模式除了在编码阶段有用外,在设计上似乎用处并不大。

其实,当时这些困惑的关键并不在于设计模式过于抽象或应用有难度,而在于我可能从一开始就没有搞清楚设计模式的应用范围和背景:设计模式到底解决什么问题?为什么要抽象这样的场景?又是如何解决这些问题的?

对设计模式常见的误解

正因为没有搞清楚这些应用范围和背景,才导致大多数时候我们总是在“生搬硬套”设计模式,以为在应用设计模式,却不知道还没入门就一直在误解设计模式,并无法控制地胡乱使用,最后反而引入了很多不必要的麻烦。

因此,要想学好设计模式,就得摘去这些误解。

误解一:经典模式太抽象,很难学下去

说到设计模式,你的第一反应是不是会想起“四人帮”GoF 的那本“经典”著作《设计模式:可复用面向对象软件的基础》?或者想起那 23 个“经典”的模式?

的确,设计模式太过于经典了,但是经典也会带来一个问题:过于抽象,难以快速理解。而对于业余时间本就不多的你来说,读抽象的经典更是一件难上加难的事。

简单来说,设计模式从不同项目中总结出来的通用经验,是为了帮助我们快速理解现有的系统,并从中找出共性规律,如果没有足够的经验或者思考,反而容易引入错误的设计,造成更多的麻烦。

所以说,“经典太抽象”只是一个事实,只要你能肯花时间认真解读,学下去并不难。


误解二:设计模式太单一,复杂业务场景难落地

现在,对于设计模式,有两个非常有意思的现象

  1. 在理论学习中,几乎所有的开发人员都认为它很重要。
  1. 在工作实践中,绝大部分开发人员在项目中又找不到合适的应用场景。

其实,发生这个冲突的关键点在于:没有搞清楚设计模式解决问题的范围所在。换句话说,设计模式并不是一种全场景的解决方案,它需要考虑适用范围。

比如,在面向对象语言 Java 领域中,如何最大限度发挥面向对象语言的继承与组合的威力?如何解耦程序的相互依赖?设计模式会提供一些解答。

如果说你现在接到的是一个复杂系统的设计任务,比如,如何设计一个秒杀系统?你不仅需要关心业务功能的实现,还要关心不同开发成员间的相互配置、服务器资源等,而此时你的脑海中浮现设计模式中的适配器模式、策略模式、状态模式……对你来说帮助并不那么明显,因为你其实还没有到如此需要细节实现的阶段。

实际上,设计模式的提出就是为了解决限定领域的有限问题。 比如,针对非业务场景的技术框架,如何实现可复用的软件?如何能够为更多的人提高编程效率?像 Spring、Netty、MyBatis、JDK 等大家公认的工具,其实随处可见设计模式的应用,但同时并不是只有设计模式本身。

所以说,你不能把设计模式当作一种通用解决方案来对待,或者认为它就应该解决超出范围的问题,一定要考虑好它的适用范围,否则问题是得不到有效解决的。


误解三:模式既然很好用,那么一切皆模式

好的设计从来不是看用的模式有多少,而是看如何合理利用模式的设计思想,以及如何利用模式解决真实的问题。

所以说,学习设计模式是为了启发我们的思考,而不是“手里握着锤子,满世界找钉子”


如何正确学习设计模式

  • 首先,要摆正心态。

    设计模式不是万能灵药,不是银弹,设计模式能解决的问题其实是有限的,你应该始终保持一个平常的心态,正确分析设计模式可以解决和不能解决的问题。

  • 其次,搞清楚设计模式的背景知识

    比如,设计模式如何定义?设计模式的历史演进与变化?设计模式有哪些适用的领域?又有哪些不适用的领域?如何结合实践分析和使用?

    学习一门知识时,如果总是忽略关联的背景知识,久而久之会养成零碎知识积累的习惯——收藏了很多资料,拆解、吸收却很少。而在学习关联知识时,你会发现,原来的知识会逐渐连接和串联起来,这是一个事半功倍的动作。

  • 再次,努力具备高手独立思考的习惯

    互联网时代,不缺资料和方法,缺的是能解决复杂难题的高手。高手之所以成为高手,是因为高手不拘泥于某一知识的高低贵贱,而是保持明智的判断,始终朝着坚定的目标前行。

设计模式 - 基本功的重要性相关推荐

  1. 美术课程对计算机的好处,电脑艺术设计的美术基本功重要性论文

    电脑艺术设计的美术基本功重要性论文 摘要:在当前的信息时代中,电脑艺术设计在设计行业中有着广泛应用,而在此过程中有不少学习者片面地认为只需将电脑软件操作技能掌握熟练即可,完全忽视了设计作品的质量优劣与 ...

  2. 工程师的基本功是什么?如何练习?听美团技术大咖怎么说

    美团技术团队 读完需要 5 分钟 速读仅需 2 分钟 在美团有一句老话,叫做"苦练基本功".美团创始人王兴解读的基本功是业务和管理的基本动作.只要能把基本功扎实练好,就能产生巨大价 ...

  3. 工程师的基本功是什么?听听美团技术大咖怎么说

    点击蓝色"陈树义"关注我哟 来源:美团技术团队 在美团有一句老话,叫做 "苦练基本功".美团创始人王兴解读的基本功是业务和管理的基本动作.只要能把基本功扎实练好 ...

  4. 工程师的基本功是什么?该如何练习?听听美团技术大咖怎么说

    在美团有一句老话,叫做"苦练基本功".美团创始人王兴解读的基本功是业务和管理的基本动作.只要能把基本功扎实练好,就能产生巨大价值.然而滴水石穿非一日之功,练好基本功是一个长期的事情 ...

  5. 工程师的基本功是什么?该如何练习?

    在美团有一句老话,叫做"苦练基本功".美团创始人王兴解读的基本功是业务和管理的基本动作.只要能把基本功扎实练好,就能产生巨大价值.然而滴水石穿非一日之功,练好基本功是一个长期的事情 ...

  6. 工程师应培养哪些基本功?听美团技术大咖怎么说

    在美团有一句老话,叫做"苦练基本功".美团创始人王兴解读的基本功是业务和管理的基本动作.只要能把基本功扎实练好,就能产生巨大价值.然而滴水石穿非一日之功,练好基本功是一个长期的事情 ...

  7. 【送书福利】谷歌工程师王争重磅新书《设计模式之美》

    关注我们丨文末赠书 所谓练武不练功,到老一场空,以技术为驱动的程序员同样如此.面向对象编程范式.设计原则.代码规范.重构技巧和设计模式这些程序员基本功在根本上决定了这个职业的发展高度.把这些基本功练好 ...

  8. 利用设计模式替代项目中的if else(转)

    面向过程设计和面向对象设计的主要区别是:是否在业务逻辑层使用冗长的if else判断.如果你还在大量使用if else,当然,界面表现层除外,即使你使用Java/C#这样完全面向对象的语言,也只能说明 ...

  9. 工程师的基本功是什么?如何练习?—学习心得分享

    开头聊几句 1.周末休息,今天下雨了,气温还行,不冷不热 2.刚看完<这!就是街舞>,很燃很炸,一些作品表达的东西也很让人感动 3.发现真正热爱的事情,并为之付出所有的能量,很让人羡慕 开 ...

最新文章

  1. 22种代码坏味道及重构手段
  2. panda.read_csv的常用参数说明
  3. xss绕过字符过滤_XSS过滤器绕过总结
  4. Linq 常用操作(增删改)
  5. 初试Windows 8 RTM
  6. abb外部轴零位校准_ABB机器人如何控制非同步联动外部轴
  7. 解决方法|ESP8266环境搭建出现 usrbinenv bashr :没有那个文件或目录
  8. pytorch Tensor的操作和Numpy之间的转化(三)
  9. Theano 中文文档 0.9 - 7.2.6 Theano如何处理形状信息
  10. Python打包成.exe文件详细实例
  11. .NET CORE——Console中使用依赖注入
  12. 斯坦福NLP笔记6 —— Defining Minimum Edit Distance
  13. 【oracle】sql处理重复数据
  14. java中jdk api等概念的解释
  15. 火山软件开发访问网页查找电话号和读写文件应用
  16. 一种基于折射反向学习机制与自适应控制因子的改进樽海鞘群算法
  17. 【数据分析】豆瓣电影Top250爬取的数据的可视化分析
  18. c++ 箭头符号怎么打_C++编程基础知识二
  19. 如何使用 ssh 建立 socks 代理
  20. 1.31亿月活的爆款游戏,它的后端架构是怎样的?

热门文章

  1. 微型计算机重点,微型计算机理期末重点.doc
  2. html语言hr的用法,HTML hr noshade 属性 | Paoo教程
  3. 基于MATLAB的面向对象编程(1)——类,属性,方法
  4. 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
  5. 合并两个有序的单链表
  6. FCN全连接卷积网络(2)--读论文的过程理解
  7. NTU 课程 ERIC(5) 对社会的责任
  8. 李宏毅线性代数笔记1:系统
  9. 文计笔记2: 计算机硬件知识
  10. Python编程基础:第五十节 海象运算符Walrus Operator