当前位置:首页 > 公众号精选 > 程序员小灰
[导读]前几天,我给大家介绍了算法和数据结构的基础知识。后来又有小伙伴私信问我:“小灰,你能不能也讲一讲设计模式的相关知识?”没问题!对于程序员来说,设计模式也是必须要掌握的一项核心知识,我今天就来给大家重点讲一讲。编程的痛点那么,到底什么是设计模式呢?在介绍这个概念之前,我先问问大家,...

程序员小灰" data-alias="chengxuyuanxiaohui" data-signature="一群喜爱编程技术和算法的小仓鼠。" data-from="0">前几天,我给大家介绍了算法和数据结构的基础知识。后来又有小伙伴私问我:“小灰,你能不能也讲一讲设计模式的相关知识?”



没问题!对于程序员来说,设计模式也是必须要掌握的一项核心知识,我今天就来给大家重点讲一讲。




编程的痛点




那么,到底什么是设计模式呢?



在介绍这个概念之前,我先问问大家,在你们的工作当中,有没有接手过“祖传代码”?也就是老板让你维护前一任程序员写的老项目。



小灰自己做过10年的程序员,有过很多次这样的经历。这些个祖传代码,有相当一部分压根儿不知道写的是什么,注释非常少,结构也很混乱,不敢修改也不敢删除。







当初写下这些代码的前任,要么已经离职了,根本找不到人来问。



就算他还在职,能找到人,想问对方一点代码的问题,也还得看对方的脸色。



这就是祖传代码的痛苦。




设计模式是什么



我们该怎么办呢?



许多前辈程序员经过长期实践,总结出了一系列的解决方案。这些解决方案可以提高代码的可读性,增加代码的可重用性,保证代码的可扩展性。



这一系列解决方案,被人们称为设计模式,它是面向对象编程当中的各种经典套路。



设计模式是一种抽象的编程思想,并不局限于某一特定的编程语言,而是在许多语言之间相通的。比如在Java、C#、C 语言当中,都可以使用到设计模式。



但设计模式也有它的边界,它的适用范围是面向对象的编程语言。对于面向过程语言、函数式编程语言,谈论设计模式是没有意义的。



如果有人跟你说,Fortran语言当中的设计模式非常好用,或者说自己在学习Lisp语言当中的设计模式,这人一定是一个假程序员。








设计模式的分类



那么,程序员前辈们一共总结出了多少种设计模式呢?



在1995年,有四位编程界的大佬合著了一本书,书名叫做《Design Patterns: Elements of Reusable Object-Oriented Software》,翻译过来就是《设计模式:可复用面向对象软件的基础》,书里面总共收录了23种设计模式。



这本书是软件研发领域重要的里程碑,合著此书的四位作者,被业内称为GoF(Gang of Four),因此这本书也被人称为GoF设计模式。



这23种设计模式,又可以根据设计的目的,分为大大类型:



第一类:创建型模式



这一类设计模式的目的是用于创建对象。比如大家常用的工厂模式、单例模式,就属于创建型模式。



第二类:结构型模式



这一类设计模式的目的是优化不同类、对象、接口之间的结构关系。比较常用的代理模式、装饰者模式,就属于结构型模式。



第三类:行为型模式



这一类设计模式的目的是更好地实现类与类之间的交互以及算法的执行。比如策略模式、观察者模式,就属于行为型模式。



下面这张图,总结了所有23种设计模式的分类,大家可以收藏一下。






可能有的人会觉得疑惑:网上有很多程序员总是说到24种设计模式,你这里怎么只说了23种呢?



其实,这两种说法都没错,24种设计模式是在原有23种的基础上,补充了一个空对象模式,它属于行为型模式。




此外,随着编程领域的不断发展,有很多新的设计模式不断被人提出来,目前人们所用到的设计模式其实远远不止24种。



比如生产者消费者模式,发布订阅模式等等,他们都不在24种设计模式当中,但仍然非常常用。



可能有些做后台开发的朋友会问了:我们平时用到的MVC模式,是不是也属于设计模式呢?




以我个人的观点,设计模式所研究的是类与对象、接口之间的关系,解决的是某一个特定问题。



而MVC,研究的是代码模块之间的关系,并且提供的是一揽子解决方案。所以MVC属于一种架构,而不是设计模式。




如何学习设计模



那么,我们怎么才能学好设计模式呢?



就像学习算法和数据结构一样,我们可以通过看书、看网上的视频课程,来了解各种设计模式的思想和实现。



入门级别的书,比较推荐程杰老师的《大话设计模式》。



进阶级别的书,推荐看看《Head First 设计模式》这本书。



课程的话,推荐极客时间王争老师的《设计模式之美》,同时在B站上也有一些比较优质的设计模式课程,我会把课程链接发到本视频的置顶回复当中。



与此同时,大家也可以多看看一些经典框架的源码,里面也采用了很多的设计模式。比如Java程序员常用的Spring框架,里面就使用了工厂模式、代理模式、单例模式、适配器模式等等。






这样既能熟悉框架的原理,也能加深对设计模式的理解,可谓是一举两得。



大家都是通过哪些途径学习的设计模式?欢迎写在留言区。



好了,关于设计模式的基本概念,我就给大家介绍到这里。以下是小灰曾经分享过的设计模式相关漫画,没看过的小伙伴可以看一看:



装饰器模式


职责链模式


工厂模式


建造者模式


原型模式


代理模式


外观模式


观察者模式



此外,最近小灰尝试走出舒适区,入驻B站开始录制程序员相关的视频。欢迎大家关注小灰的B站号【我是程序员小灰】,给个一键三连,感谢支持哦~~


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

一般从事互联网工作,尤其是软件类岗位,通常加班现象都是比较严重的。那么,做硬件的就没有加班了吗?

关键字: 互联网 程序员 工程师

在大多数人眼里,程序员是一份高薪职业,即便是刚毕业出来找工作的应届生,似乎也能随随便便月收入过万。那么,事实真是如此吗?

关键字: 程序员 计算机

在现在这个网络时代,程序员在日益辛苦地工作,他们总是喜欢学习、尝试新事物,求知欲望相当强,以最低调、踏实、核心的功能模块搭建起这个科技世界。那么,本期的老黄历就带大家一起来看看关于1024程序员节的由来。

关键字: 1024 程序员 科技世界

(全球TMT2022年8月15日讯)为全面和深入地了解中国开发者群体整体现状、应用开发技术以及开发工具、平台的状况和发展趋势,CSDN发布《2021-2022 中国开发者调查报告》,调研万名开发者,围绕开源开发者画像、...

关键字: 开发者 BSP 操作系统 程序员

北京2022年5月17日 /美通社/ -- 程序员作为互联网技术的关键支撑力量,是携带互联网基因的灵魂人物。互联网大厂程序员自带高光,一度成为就业市场上的香饽饽。在疫情的影响和互联网泡沫逐渐被稀释的情况下,以大厂为代表的...

关键字: 程序员 通信 大数据 联网技术

(全球TMT2022年5月17日讯)程序员作为互联网技术的关键支撑力量,是携带互联网基因的灵魂人物。互联网大厂程序员自带高光,一度成为就业市场上的香饽饽。在疫情的影响和互联网泡沫逐渐被稀释的情况下,以大厂为代表的互联网...

关键字: 程序员 通信 大数据 联网技术

最近有一条关于程序员删代码跑路的新闻登上了微博热搜。

关键字: 程序员 互联网

  上海2022年5月11日 /美通社/ --《中国居民膳食指南(2022)》显示,目前我国超过半数成年居民存在超重或肥胖现象。996、加班、熬夜...在高强度工作的压力下,如何避免"过劳肥&quo...

关键字: 网络 HP 程序员 医疗服务

程序员小灰

379 篇文章

关注

发布文章

编辑精选

技术子站

关闭