曾有人说过“设计模式、数据结构和算法就好比九阳神功,你会了九阳神功再学习其他的武功那就事半功倍”,这个比喻恰到好处。

  1. “九阳神功”之设计模式

在实际中我们也经常跟设计模式打交道,比如我们刚开始面试的时候基本上大部分的IT公司都会问你:

“你会哪些设计模式”?

“你实际项目中使用过哪些设计模式,又是如何使用的”等等之类的问题。

再比如我们项目新一期的开发,如果是在原有的基础上进行新增你会怎么办(可扩展性)?

如果考虑以后可能某个功能会变更另外一种对接方式你又会怎么办(可维护性)?

你是否遇到了刚进公司看到别人封装的代码感觉复杂但是细看又感觉设计很妙?

我们从“能写代码”到“写好代码”再到“能够设计代码”,这不仅仅是技术的提升也是我们编程思想的提升,其中的关键就是设计模式。

开发过程中面临着高内聚低耦合性、可维护性、可扩展性、可重用性以及灵活性等多方面的挑战,使用设计模式就是为了让程序变得更好。而能否理解并掌握设计模式已变成了衡量程序员能力的标准之一。

![在这里插入图片描述](https://img-blog.csdnimg.cn/1979061b61f94adf99e3b499242497bc.jpeg

下面我们就来认识下九阳神功的基础功——设计模式

2.设计模式优势及分类

01.设计模式是什么?

设计模式(Design pattern)简单来说就是在软件工程中,我们的前辈们在程序不断开发的过程中为了可以实现代码重用、可扩展、保证代码可读性和可靠性、提高我们的开发和维护效率,而总结出了一套被反复使用、多数人知晓的、经过分类编目的代码设计经验(让我们少走弯路)。

目前开发中比较流行的还是1994年GoF(Gang of Four四人组)发布的Design patterns书中的提到的23种经典设计模式。

当然现在设计模式的种类不仅仅这些,是一些大佬或者公司内部研发的设计模式,只不过并没有公开而已。

02.设计模式的优势:

◆重用设计,实现代码的重用。

◆提高代码质量,设计模式有助于我们编写出高质量,可维护的代码,让系统重构变得更加容易。

◆提高代码阅读能力

优秀的代码毋庸置疑一定会使用设计模式,如果不了解设计模式的情况下去阅读肯定难以理解,也不能从同一高度的去分析源码或者别人写的代码。

◆节省沟通成本

工作中讨论问题的人都知晓设计模式的话,就不需要对设计模式做更多的解释,只需要讨论使用那种设计模式就可以,在开发文档中采用设计模式词汇其他人也更容易你的想法和做法。

◆节省时间

往往采用正确的设计模式,可以节约我们开发和维护的大量时间。

03.设计模式的分类:

23种经典设计模式按照类型来分的话可以分为三类:

l 创建型

l 结构型

l 行为型

具体如下:

这23种设计模式其实我们开发中都有接触,只不过我们可能使用它的时候对它并不熟悉。

以java语言为例,例如:java的IO流使用的高级流BufferedInputStream就使用了装饰者设计模式,集合List和和Set遍历使用的Iterator就是使用了迭代器模式,JDBC连接数据库加载驱动获取连接就使用了桥接模式,对象的深浅层次拷贝就是使用的原型模式等等。

Java语言中非常流行的框架spring被称为非常厉害的框架,设计模式在spring中的展现可谓是淋漓尽致。

Spring中使用的设计模式如下:

图片

04.学习设计模式推荐图书:

《大话设计模式》

《HEAD FIRST 设计模式》

软件开发程序员的“九阳神功”——设计模式相关推荐

  1. 硬件程序员和软件开发程序员相比,哪一个就业发展前景比较好呢?

    计科专业毕业从事软件开发,也有和硬件工程师打交道,从人员数量相比硬件工程师和软件工程师无法比较.毕竟硬件主要在开始阶段,一旦可以用了后续人手会少许多,其实单纯的比较软件和硬件没有多大的意义,任何一种岗 ...

  2. 腾讯优测推荐软件开发程序员必备的工具集

    正所谓"工欲善其事必先利其器"程序员也是一样,选择一个好工具可以大大提升开发效率,下面是我使用的一些并且觉得很不错的软件,和大家分享下.最后还会给大家介绍一款我最近在测试全流程一站 ...

  3. 为什么阿里巴巴最爱招Java开发程序员?

    为什么阿里巴巴最爱招Java开发程序员?因为java本身设计特性就是大规模工程语言. 它有三个根本性的特征 1.适应各种业务,你目前知道的几乎所有的业务都可以用java写.有很多语言做不到这一点. 2 ...

  4. 101个帮助你成为更好Web开发程序员的技巧

    对于像你我这样的开发人员来说,进入IT行业会带来很多挑战和机遇.有很多东西要学习和掌握.我们有React,Vue,Angular和Svelte之类的JavaScript框架.我们有静态站点生成器,即J ...

  5. Android移动开发程序员的职业发展之路

    写在前面: 又是一个阴雨的周末,也不知道是不是在江南待的太久的缘故,每逢阴雨的周末,兴奋的连懒觉都睡不了.看着窗外的细雨,回想起这一路走来的点点滴滴,些许感慨!光阴似箭,岁月蹉跎,未来的路在何方,明年 ...

  6. 测试/开发程序员的成长之路,未来是你们的......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  7. 剖析Android移动开发程序员的职业发展之路

    剖析Android移动开发程序员的职业发展之路 做Android移动开发已经有三年时间,其中甘苦自知,对Android开发和对Android程序员的职业发展有一些自己的感悟,在这里愿与大家分享和讨论. ...

  8. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

  9. java开发 职业技能_java编程开发程序员需要具备哪些职业技能

    随着互联网的不断发展,java编程开发可以说是目前学习人数和应用范围非常多的一种编程语言了,而今天我们就一起来了解一下,java编程开发程序员需要具备哪些职业技能. 1.数据结构和算法分析 数据结构和 ...

  10. C/C++开发程序员应有的素养

    C/C++开发程序员应有的素养 文章来源说明 什么是好的程序员? 1.版权和版本 2.缩进.空格.换行.空行.对齐 3.程序注释 4.函数的[in][out]参数 5.对系统调用的返回进行判定 6.i ...

最新文章

  1. 【.net部署】Server Error in ‘/‘ Application.错误解决方案
  2. visual studio输入法打不了中文_目前比较满意的手机输入法方案:Gboard + 搜狗词库...
  3. 两个数从大到小排列输出
  4. python云计算面试题_云计算工程师面试问题及答案解析
  5. openldap 中文乱码问题
  6. ASP.NET 3.5中的ListView控件和DataPager控件(一)
  7. 算法导论2.1-2.3 部分答案
  8. PAT乙级(1017 A除以B)
  9. 455 periodic strings
  10. 170319 剑指offer 1.把一个字符串转化成整数(简单问题的全面性考虑)
  11. ORACLE恢复数据
  12. 水面反光如何拍摄_「摄影技巧全解」「水面篇」不一样的水面粼粼波光
  13. 流传甚少的seo排名爆破技术全解析
  14. java 把客户信息录入数组,需求说明 java-实现添加客户信息 客户信息包括:姓名、年龄、是否有会员卡...
  15. 如何坚持完成自己的目标和计划?
  16. Meta 开源早期 AI 翻译工具支持 200 种语言
  17. 计算机做word的表格,word表格制作,教您word如何制作表格
  18. 2023哈尔滨工业大学计算机考研信息汇总
  19. 快速定位线上慢 SQL 问题,掌握这几个性能排查工具可助你一臂之力
  20. 使用Python 对ENVI SPECTRAL LIBRARY(.sli)进行读取

热门文章

  1. 使用proteus仿真STM32超声波SRF04测距!Code+Proteus
  2. windows电脑版微信多开的方法
  3. android编程拨号界面,在Android4.0中Contacts拨号盘界面剖析(源码)
  4. opencv-pythons实现图像周长面积(三角形)检测DIY整理
  5. 基于vue3.0的遮罩
  6. FishEye Crucible分析
  7. Power BI Desktop 微软官方入门教程
  8. python powerbi知乎_数据分析-PowerBI
  9. 域名转发修改dns服务器,域名注册修改DNS服务器
  10. C#生成格林威治时间字符串