灸哥问答:作为初学者如何学习设计模式?

53d3f6453fc3449cb0cfbd187fc6b61a.jpeg

最近开始把几年前关于设计模式的笔记逐步整理出来,并且分享给大家。讲设计模式的书籍、视频比比皆是。这次我针对每一个设计模式分为五个方面进行介绍:

  1. 什么是 X 设计模式?(是什么?)
  2. 为什么用 X 设计模式?(为什么?优势)
  3. 如何用 X 设计模式?(怎么用?使用简单的代码示例演示该设计模式的使用方式)
  4. 是否存在缺陷和不足?(设计模式不是万能的)
  5. 如何缓解缺陷和不足?(方法永远比问题多)

基于以上五个方面已经介绍了一些设计模式,有一些朋友问:作为初学者应该如何学习设计模式?今天我会从我的学习过程、我对下属的培养过程,给出我对设计模式学习的建议。

在讲之前我有一个前提先同步大家:设计模式不是万能的,用就好好用,如果用不好,不如不用!

一、理论准备

  1. 学习并掌握基本的编程知识:如果一个人连最基础的编程知识都没有,那就不要学习设计模式了。学也学不会的。这块主要要对编程语言,比如 Java,以及面向对象编程的知识有一定的了解和掌握,这样才能更好地开始学习设计模式。
  2. 学习并掌握设计原则:这部分的内容我前面都有详细介绍过,一般书本讲的都是 SOLID 原则,在这个基础上提出了软件设计七原则,包括 SOLID + CARP + LoD,建议使用我的内容好好学习掌握。
  3. 学习并掌握设计模式:找一本设计模式的书、视频或者我这个系列的也可以,你如果有一个理论指导,然后针对每一个设计模式去理解他的原理和实际应用的场景。先从常用的简单的开始,这样学习才能持续下去。当然你学习过程中有什么问题欢迎和我交流。

二、辅助学习

  1. 找寻优秀的设计模式实例进行学习:比如 Spring 中单例模式的使用,很经典,我经常和我的下属们说,这部分的源码好好啃下去,对单例的理解程度会晋级的。这部分代码不难找,网络上介绍的有很多。
  2. 善于使用工具来深化学习程度:有一些设计工具能帮助你在学习的过程中更好地理解设计模式,比如一些设计模式的可视化工具、UML 制图工具等,可以尝试地用起来,画起来。
  3. 善于利用博客、社区、公众号资源:这个就不多少了,不仅是通过这些渠道看理论、看代码示例,更多地是看别人是如何学习的,分享学习的经验、交流学习的教训。

三、动手并持续

  1. 动手实战:学任何技术不动手是学不会的,关于设计模式的学习也是一样的,你要动手去写才行,这又两种模式,一种是自己写,一种是在实际项目中去写,只有通过多用才能更好地掌握,但是别忘了我开篇的前提,而且在用的过程中,要注重在实际场景中你使用何种设计模式解决问题的思考过程。
  2. 重复学习和持续实践:关于技术的学习不是用一次就掌握的,理论也不是看一遍就理解的,必须是一个重复学习的过程,也必须是一个持续实践的过程。

 

要记住,设计模式,它是解决特定问题的通用模板,但并不是所有问题都需要设计模式。

在实践中,根据具体情况灵活运用设计模式,并在不断的实践中逐渐提高你的设计水平。

 

以上是我的一些建议和看法,希望可以帮到你。

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-31 10:42:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-31 10:42:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-31 10:42:01       82 阅读
  4. Python语言-面向对象

    2023-12-31 10:42:01       91 阅读

热门阅读

  1. Chocolatey

    2023-12-31 10:42:01       58 阅读
  2. centos7 磁盘逻辑卷扩容

    2023-12-31 10:42:01       50 阅读
  3. 【C++】循环结构中的变量的生命周期

    2023-12-31 10:42:01       59 阅读
  4. node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

    2023-12-31 10:42:01       56 阅读
  5. 多态的底层实现原理和泛型的底层实现原理

    2023-12-31 10:42:01       57 阅读
  6. C++ 具名要求

    2023-12-31 10:42:01       43 阅读
  7. C++ 类打包LIB方法,创建 C 接口函数方法

    2023-12-31 10:42:01       59 阅读
  8. 通信原理课设(gec6818) 006:网络编程

    2023-12-31 10:42:01       46 阅读
  9. Python使用PyMySql增删改查Mysql数据库

    2023-12-31 10:42:01       65 阅读