前几天给大家介绍了算法和数据结构的基础知识。后来有个小伙伴私信问我:“Grey,你能不能也讲讲设计模式的相关知识?”
没问题!对于程序员来说,设计模式也是必须掌握的核心知识。今天,我就重点说一下。
编程的痛点
那么,到底什么是设计模式呢?
在引入这个概念之前,我先问你,你在工作中接过“祖典”吗?也就是老板让你维护前任程序员写的老项目。
肖本人做程序员也有10年了,有过很多这样的经历。这些祖典有相当一部分根本不知道写的是什么,注释很少,结构混乱,不敢修改或删除。
当初写这些代码的前任要么已经离职,找不到人问。
就算他还在职,能找到人,想问对方一些密码问题,还是要看对方脸色的。
这就是祖宗法典的痛苦。
什么是设计模式?
我们做什么呢
很多资深程序员经过长期的实践总结出了一系列的解决方法。这些解决方案可以提高代码的可读性、可重用性和可伸缩性。
这一系列解决方案被称为设计模式,是面向对象编程中的经典套路。
设计模式(Design pattern)是一种抽象的编程思想,并不局限于某一种特定的编程语言,而是在多种语言之间是相通的。例如,设计模式可以用在Java、C#和C++语言中。
但是设计模式也有它的边界,它的适用范围是面向对象编程语言。对于面向过程的语言和函数式编程语言来说,谈论设计模式是没有意义的。
如果有人告诉你Fortran语言的设计模式非常有用,或者说他们正在学习Lisp语言的设计模式,那么这个人一定是个伪程序员。
设计模式的分类
那么,程序员前辈们总结了多少设计模式呢?
1995年,编程界的四位大佬合著了一本名为《设计模式:可重用面向对象软件的元素》的书,翻译过来就是《设计模式:可重用面向对象软件的基础》。书中有23种设计模式。
这本书是软件研发领域的一个重要里程碑。这本书的四位合著者在业内被称为g of(四人帮),所以这本书也被称为GoF设计模式。
根据设计的目的,这23种设计模式可以分为几大类:
第一种:创意模式。
这种设计模式的目的是创建对象。例如,常用的工厂模式和单例模式都属于创造性模式。
第二类:结构模式。
这种设计模式的目的是优化不同类、对象和接口之间的结构关系。常用的agent模式和decorator模式都属于结构化模式。
第三类:行为模式。
这种设计模式的目的是为了更好地实现类之间的交互和算法的执行。比如策略模式和观察者模式都属于行为模式。
下图总结了所有23种设计模式的分类,大家可以收藏一下。
有些人可能会疑惑:网上有很多程序员总是在讲24种设计模式。为什么这里只说23?
其实这两种说法都是对的。24个设计模式是在原来的23个基础上,补充了一个空对象模式,属于行为模式。
此外,随着编程领域的不断发展,许多新的设计模式被提出。目前,人们使用的设计模式远不止24种。
例如生产者-消费者模式、发布-订阅模式等。,不在24种设计模式之列,仍然非常常用。
有做后台开发的朋友可能会问:我们平时用的MVC模式也是设计模式吗?
从我个人的角度来说,设计模式研究的是类、对象、接口之间的关系,解决的是一个具体的问题。
而MVC则研究代码模块之间的关系,提供一揽子解决方案。所以MVC属于一种架构,而不是一种设计模式。
如何学习设计模式
那么,怎样才能学好设计模式呢?
就像学习算法和数据结构一样,我们可以通过看书和看网络视频课程来了解各种设计模式的思路和实现。
其他入门书籍,我推荐程杰的《大话设计模式》。
对于进阶书籍,我推荐阅读《头部先设计模式》这本书。
对于课程,我推荐极客时代老师王政的《设计模式之美》。同时,哔哩哔哩也有一些高质量的设计模式课程。我会把链接发到这个视频的顶部回复。
同时也可以看看一些经典框架的源代码,也采用了很多设计模式。比如Java程序员常用的Spring框架,使用工厂模式、代理模式、单体模式、适配器模式等等。
这样既可以熟悉框架的原理,又可以加深对设计模式的理解,可谓一举两得。
你是如何学习设计模式的?欢迎在留言区写。
好了,这里给大家介绍一下设计模式的基本概念。如果我觉得这篇文章对你有帮助,希望我能喜欢。感谢您的支持!