如何真正理解好一个「设计模式」?
真正理解设计模式
设计模式是无数开发者前辈,经过大量编码实践,总结下来的一套能提高程序扩展性、可复用性的哲学。它就像建筑大师多年经验沉淀下来的楼宇设计方法,又像武侠小说中的武林高手击败对手的武林秘籍。
1. 设计模式的由来
实话讲,很多开发者初次接触设计模式时,觉得它太玄学,明明封装为一个对象就能解决问题,为啥非要创建多个对象,各个对象还有引用关系,既不简约,也不可读。学完几个设计模式,最后真心觉得设计模式没用!
直到接手一个大项目时,对设计模式的认识才渐渐有所改变。客户的需求总会变,几天一个样。于是,开发者总要去改动原来的类或方法。好不容易上线,客户需求还在变,于是开发者再回去修改原来的方法。客户新需求确实实现了,但不要求改动的某些功能却意外出现bug,这令开发者非常挠头。
于是,这些前辈们,痛定思定,要设计出一套开发模式,既能保证住原功能的稳定性,同时也能实现客户需求变化。
这才有了设计模式。
2. 面向特定场景
前辈们发现,为了同时实现原功能和新功能,一种设计模式很难做到。不同的需求场景,对应开发出不同的设计模式,久而久之,沉淀下十几种经典常用的设计模式。
这些设计模式大概可分类为:创建对象的设计方法,定义行为的设计方法。至于创建对象的设计模式,前辈们根据具体的场景不同,又制定出几种方法;定义行为的方法,也根据场景不同定义出不同的设计方法。
3. 对象工厂
如何真正理解好一个「设计模式」?相关推荐
- 程序员经常说的「设计模式」到底是什么?
当程序员说去「设计模式」时,你是否会一脸懵逼,到底什么是设计模式呢? 很多人应该听说过设计模式(Design pattern),又或多或少的看过或用过设计模式,但是实际用在开发过程中总有点心有余而力不 ...
- 「设计模式」六大原则之三:里氏替换原则小结
文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...
- 线性代数:如何最通俗地理解矩阵的「秩」?
小时候老师总告诉我们「要有n个方程才能确定地解出n个未知数」--这句话其实是不严格的,如果你想确定地解出n个未知数,只有n个方程是不够的,这n方程还必须都是「干货」才行.从这个角度,初学者可以更好地理 ...
- 抖音能成为下一个「微信」吗?
本文转载自IT之家 从推出抖音搜索.上线抖音支付,到试水本地生活,主打兴趣电商,2021 年才刚过去四个月,抖音却在每个月都有大动作. 抖音是字节跳动旗下用户最多.营收占比最大的产品.张一鸣曾用「动态 ...
- 我访问了一个「假」的 GitHub,难道是 PronHub ,还是 GayHub ?
[回复"1024",送你一个特别推送] 我访问了一个「假」的 GitHub,难道是 PornHub ,还是 GayHub ?都不是,而是下面我要讲的,请仔细阅读. 最近我在浏览掘金 ...
- 赴一场开源盛会丨10月29日 COSCon‘22 开源年会杭州分会场,这里只差一个「你」!
报名地址:https://www.bagevent.com/event/8322877 2022年,世界正在改变,开源创造价值.已经办到第七届的开源年会首次来到杭州与开发者们相聚.你眼中的开源是怎样的 ...
- COSCon'22@Hangzhou|10月29日这里只差一个「你」!
COSCon'22 开源社/KAIYUANSHE 业界最具影响力的开源年度盛会 2022 第七届中国开源年会 (COSCon'22) 来啦! 如果你热爱开源.热衷创新 如果你想饱听各路大咖的主题 ...
- 一个「学渣」从零开始的Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...
- 一个「学渣」从零Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...
最新文章
- Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换...
- python二十四:python练习题
- python牛顿迭代法_python-来自维基百科示例的Gauss-Newton方法的实现
- 常用的排序算法的时间复杂度和空间复杂度 .
- easyUI 运用窗口和form表单制作导出功能
- Exynos4412 内核移植(七)—— 内核相关知识补充
- R语言第八讲 评估模型之交叉验证法分析案例
- huffman图像编码C语言,Huffman编码的c语言实现
- NB-IoT将给智能锁行业带来哪些影响?
- Flutter进阶—实现动画效果(三)
- JavaScript-预解析(变量提升)
- 【水果识别】基于matlab GUI自助水果超市【含Matlab源码 594期】
- Java-Android 之单选按钮的运用
- 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
- Fedora Linux 14百度云下载,Fedora Linux 14下载
- jTopo 功能完善
- 让你的PPT更出彩的时间轴这样画!
- python百度经纬度转google经纬度
- 解析几何 直线与平面 直线与平面(1.2)
- LPVOID lpParameter