【设计模式】一、是什么,为什么,怎么学
设计模式是什么?
设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。 模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。
人们常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。 但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。 同一模式在两个不同程序中的实现代码可能会不一样。
算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 你可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。
为什么学习设计模式?
引子:想象一下一个厨师,不学菜名如何跟人快速的交流。回锅肉,鱼香肉丝,龙井虾仁,狮子头,叫花鸡。请你换一种方式来介绍试试看。
设计模式也是,作为程序员之间的共同语言有必要学习下,别人讲个模式,而你并不懂,尴尬不,沟通成本也变高,当然更为重要的原因是,这是前辈们这么多年摸滚打爬总结总结出来有效经验总结,重要性自然不必多说,在我看来,学习设计模式的必要性就跟1+1=2一样明显。
学习设计模式的好处:
- 提高系统设计能力,代码更简洁,更易于扩展。 在互联网公司干过的都知道,研发流程里最确定的东西就是变化本身。需求是不可能一成不变的,唯一不变的就是需求会一直变。这就对研发人员提出了更高的要求,需要在系统设计的时候考虑到后续的扩展。
- 设计模式可以帮助阅读源码、写框架。 在我们现在使用的不少框架中,都使用了很多的设计模式。越是底层的系统,他们就需要越抽象,他们使用到的设计模式就越多。例如:Spring 框架中使用到的设计模式就多达十几种,有工厂模式、代理模式、模板模式等等。
- 设计模式有利于你面试。 这点可以说是挺功利的一点,但也确实是最实在的一点。工作三年以上的工程师,至少要会学习一些设计模式。只有掌握了合理的设计模式,你写的功能才能更易于扩展。这也是我们这些工作多年的老码农,和刚毕业的小年轻的区别。如果你工作了好几年,写代码的时候还是从头写到尾短平快,不考虑一点扩展性,那么你可能真的很容易被替代。现今的面试中,也越来越考察面试者的代码编写能力了。掌握设计模式的思维方式,可以帮助你在面试中拿到更多的筹码、赢得更高的薪资。
怎么学习设计模式?
从设计模式的定义出发:
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
提取关键要素模式名称、问题、解决方案和效果,模式名称(Pattern Name)通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的;问题(Problem)描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;解决方案(Solution)描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;效果(Consequences)描述了模式的优缺点以及在使用模式时应权衡的问题。
换成更通俗的话可以说是:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。如果针对每个设计模式都能想明白这些问题,那在开发过程也就自然而然会用上设计模式了。
参考
常用设计模式有哪些?
设计模式就该这么学:为什么要学设计模式?(开篇漫谈) - 骑白马的菜鸟
设计模式系列(开篇):为什么要学设计模式? - 陈树义的博客
为什么一定要学习设计模式 - 掘金
史上最全设计模式导学目录(完整版)
【设计模式】一、是什么,为什么,怎么学相关推荐
- Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?
一.引言 Hello,我是小木箱,欢迎来到小木箱成长营Android架构演进系列教程,今天将分享Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式? 今天分享的内容主要分为四部分内 ...
- 设计模式之小金的泡妞学(上)
在程序员的世界里,泡妞可真的是一门很大的学问,因为程序员天真单纯腼腆,不懂得套路,嘴巴也不会说,每天都沉浸和陶醉在代码的世界里,不亦乐乎,对于泡妞来说,基本上不怎么会,更不要说屌丝逆袭了,所以跟大家从 ...
- 一起学设计模式 - 一起开始设计模式的修炼之路
文章目录 一起学设计模式 - 一起开始设计模式的修炼之路 1.为什么要学设计模式 2.设计模式的六大原则 2.1 单一职责原则(Single responsibility principle) 2.2 ...
- Carson带你学设计模式:模板方法模式(Template Method)
前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...
- 从零开始单排学设计模式「装饰模式」黑铁 I
阅读本文大概需要 3.6 分钟. 本篇是设计模式系列的第四篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...
- vue created 调用方法_深入解析 Vue 的热更新原理,偷学尤大的秘籍?
大家都用过 Vue-CLI 创建 vue 应用,在开发的时候我们修改了 vue 文件,保存了文件,浏览器上就自动更新出我们写的组件内容,非常的顺滑流畅,大大提高了开发效率.想知道这背后是怎么实现的吗, ...
- 使用IoC 容器清洁工厂设计模式
目录 观众 问题 解决方案 讨论 Download source code - 1.7 MB (译者注:Demo中CleanFactory为新解决方案,DirtyFactory为问题中提到的解决方案) ...
- 设计模式视频教程——【从设计到模式】
准备了好久的设计模式教程,最终在昨天周末录制完毕.当晚上传到网易云课堂.第二天就通过了审核,这次网易工作人员的工作效率还是相当能够的. http://study.163.com/course/cour ...
- 通往架构师之路系列之Java设计模式(二)工厂方法模式
前言 参考:虫洞栈 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类 决定实例化对象的类型. 这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图 ...
- 软件设计模式--软件设计演变过程
一.写这篇文章的原因 1.C语言能够使用设计模式吗?? 2.为什么要有软件设计模式?不学行不行? 3.怎么能够成为一个好的开发者,为什么有经验的人比你开发快,代码架构还好? 4.C++作为C的扩展,为 ...
最新文章
- 飞书携手问卷网并肩抗“疫”,助力疫情信息申报收集工作
- python小游戏源码-python 像素小鸟小游戏源码(flappybird)
- ElmentUI Select 有个坑要注意下
- python登录验证程序_Python模拟用户登录验证
- python高端写法_python高级篇:使用元类方式实现单例模式详解
- python画图包-Python 绘图包 Matplotlib Pyplot 教程
- ue4网格转地形_关于纬地结合扫描地形图进行道路设计和出图的教程
- 虚拟内存和swap分区的关系
- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platf...
- c语言数组存在哪个地方,C语言数组考点归纳
- 流利阅读 2019.1.8 Taylor Swift used facial recognition software to detect stalkers at LA concert
- 小熊的人生回忆(七)
- Python第五周作业之选择题
- 大带宽服务器对于网站速度的影响有多大?
- JVM 参数 -XX:+PrintGCDetails
- 高分2(GF2)卫星数据系列处理
- rgb颜色设置方法及常用颜色的RGB值
- 《因为一份赤城的热爱》,庄忻恬、苏洋、陈璐、姜楠和陈嘉华共演
- Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行
- AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁
热门文章
- 巴铁兄弟加我微信,问如何通过写博客赚钱?
- java调用windows的wmi
- LeetCode 491 递增子序列
- 软件测试工程师简历要怎么写,才能让 HR 看到?
- MySQL8.0.17 - Multi-Valued Indexes 简述
- ZOJ 3426 HDU 3719 Snooker Referee
- java 发送邮件 ip被网易拉黑,发信IP或者发件人地址被网易加入了黑名单,原因如下及解决方法!...
- kali中steghide命令工具教程;7z命令详解;kali中base64命令详解
- Markdown (CSDN) MD编辑器(三)- 图片缩放、指定尺寸、居中、左对齐、右对齐
- 计算机休眠不播放音乐,电脑休眠后不能播放音乐怎么办