设计模式是什么?

设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性
设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。
人们常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。 但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。 同一模式在两个不同程序中的实现代码可能会不一样。
算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 你可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。

为什么学习设计模式?

引子:想象一下一个厨师,不学菜名如何跟人快速的交流。回锅肉,鱼香肉丝,龙井虾仁,狮子头,叫花鸡。请你换一种方式来介绍试试看。
设计模式也是,作为程序员之间的共同语言有必要学习下,别人讲个模式,而你并不懂,尴尬不,沟通成本也变高,当然更为重要的原因是,这是前辈们这么多年摸滚打爬总结总结出来有效经验总结,重要性自然不必多说,在我看来,学习设计模式的必要性就跟1+1=2一样明显。
学习设计模式的好处:

  1. 提高系统设计能力,代码更简洁,更易于扩展。 在互联网公司干过的都知道,研发流程里最确定的东西就是变化本身。需求是不可能一成不变的,唯一不变的就是需求会一直变。这就对研发人员提出了更高的要求,需要在系统设计的时候考虑到后续的扩展。
  2. 设计模式可以帮助阅读源码、写框架。 在我们现在使用的不少框架中,都使用了很多的设计模式。越是底层的系统,他们就需要越抽象,他们使用到的设计模式就越多。例如:Spring 框架中使用到的设计模式就多达十几种,有工厂模式、代理模式、模板模式等等。
  3. 设计模式有利于你面试。 这点可以说是挺功利的一点,但也确实是最实在的一点。工作三年以上的工程师,至少要会学习一些设计模式。只有掌握了合理的设计模式,你写的功能才能更易于扩展。这也是我们这些工作多年的老码农,和刚毕业的小年轻的区别。如果你工作了好几年,写代码的时候还是从头写到尾短平快,不考虑一点扩展性,那么你可能真的很容易被替代。现今的面试中,也越来越考察面试者的代码编写能力了。掌握设计模式的思维方式,可以帮助你在面试中拿到更多的筹码、赢得更高的薪资。

怎么学习设计模式?

从设计模式的定义出发:

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

提取关键要素模式名称、问题、解决方案和效果,模式名称(Pattern Name)通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的;问题(Problem)描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;解决方案(Solution)描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;效果(Consequences)描述了模式的优缺点以及在使用模式时应权衡的问题。

换成更通俗的话可以说是:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。如果针对每个设计模式都能想明白这些问题,那在开发过程也就自然而然会用上设计模式了。

参考

常用设计模式有哪些?

设计模式就该这么学:为什么要学设计模式?(开篇漫谈) - 骑白马的菜鸟

设计模式系列(开篇):为什么要学设计模式? - 陈树义的博客

为什么一定要学习设计模式 - 掘金

史上最全设计模式导学目录(完整版)

【设计模式】一、是什么,为什么,怎么学相关推荐

  1. Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?

    一.引言 Hello,我是小木箱,欢迎来到小木箱成长营Android架构演进系列教程,今天将分享Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式? 今天分享的内容主要分为四部分内 ...

  2. 设计模式之小金的泡妞学(上)

    在程序员的世界里,泡妞可真的是一门很大的学问,因为程序员天真单纯腼腆,不懂得套路,嘴巴也不会说,每天都沉浸和陶醉在代码的世界里,不亦乐乎,对于泡妞来说,基本上不怎么会,更不要说屌丝逆袭了,所以跟大家从 ...

  3. 一起学设计模式 - 一起开始设计模式的修炼之路

    文章目录 一起学设计模式 - 一起开始设计模式的修炼之路 1.为什么要学设计模式 2.设计模式的六大原则 2.1 单一职责原则(Single responsibility principle) 2.2 ...

  4. Carson带你学设计模式:模板方法模式(Template Method)

    前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...

  5. 从零开始单排学设计模式「装饰模式」黑铁 I

    阅读本文大概需要 3.6 分钟. 本篇是设计模式系列的第四篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...

  6. vue created 调用方法_深入解析 Vue 的热更新原理,偷学尤大的秘籍?

    大家都用过 Vue-CLI 创建 vue 应用,在开发的时候我们修改了 vue 文件,保存了文件,浏览器上就自动更新出我们写的组件内容,非常的顺滑流畅,大大提高了开发效率.想知道这背后是怎么实现的吗, ...

  7. 使用IoC 容器清洁工厂设计模式

    目录 观众 问题 解决方案 讨论 Download source code - 1.7 MB (译者注:Demo中CleanFactory为新解决方案,DirtyFactory为问题中提到的解决方案) ...

  8. 设计模式视频教程——【从设计到模式】

    准备了好久的设计模式教程,最终在昨天周末录制完毕.当晚上传到网易云课堂.第二天就通过了审核,这次网易工作人员的工作效率还是相当能够的. http://study.163.com/course/cour ...

  9. 通往架构师之路系列之Java设计模式(二)工厂方法模式

    前言 参考:虫洞栈 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类 决定实例化对象的类型. 这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图 ...

  10. 软件设计模式--软件设计演变过程

    一.写这篇文章的原因 1.C语言能够使用设计模式吗?? 2.为什么要有软件设计模式?不学行不行? 3.怎么能够成为一个好的开发者,为什么有经验的人比你开发快,代码架构还好? 4.C++作为C的扩展,为 ...

最新文章

  1. 飞书携手问卷网并肩抗“疫”,助力疫情信息申报收集工作
  2. python小游戏源码-python 像素小鸟小游戏源码(flappybird)
  3. ElmentUI Select 有个坑要注意下
  4. python登录验证程序_Python模拟用户登录验证
  5. python高端写法_python高级篇:使用元类方式实现单例模式详解
  6. python画图包-Python 绘图包 Matplotlib Pyplot 教程
  7. ue4网格转地形_关于纬地结合扫描地形图进行道路设计和出图的教程
  8. 虚拟内存和swap分区的关系
  9. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platf...
  10. c语言数组存在哪个地方,C语言数组考点归纳
  11. 流利阅读 2019.1.8 Taylor Swift used facial recognition software to detect stalkers at LA concert
  12. 小熊的人生回忆(七)
  13. Python第五周作业之选择题
  14. 大带宽服务器对于网站速度的影响有多大?
  15. JVM 参数 -XX:+PrintGCDetails
  16. 高分2(GF2)卫星数据系列处理
  17. rgb颜色设置方法及常用颜色的RGB值
  18. 《因为一份赤城的热爱》,庄忻恬、苏洋、陈璐、姜楠和陈嘉华共演
  19. Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行
  20. AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁

热门文章

  1. 巴铁兄弟加我微信,问如何通过写博客赚钱?
  2. java调用windows的wmi
  3. LeetCode 491 递增子序列
  4. 软件测试工程师简历要怎么写,才能让 HR 看到?
  5. MySQL8.0.17 - Multi-Valued Indexes 简述
  6. ZOJ 3426 HDU 3719 Snooker Referee
  7. java 发送邮件 ip被网易拉黑,发信IP或者发件人地址被网易加入了黑名单,原因如下及解决方法!...
  8. kali中steghide命令工具教程;7z命令详解;kali中base64命令详解
  9. Markdown (CSDN) MD编辑器(三)- 图片缩放、指定尺寸、居中、左对齐、右对齐
  10. 计算机休眠不播放音乐,电脑休眠后不能播放音乐怎么办