真正理解设计模式

设计模式是无数开发者前辈,经过大量编码实践,总结下来的一套能提高程序扩展性、可复用性的哲学。它就像建筑大师多年经验沉淀下来的楼宇设计方法,又像武侠小说中的武林高手击败对手的武林秘籍。

1. 设计模式的由来

实话讲,很多开发者初次接触设计模式时,觉得它太玄学,明明封装为一个对象就能解决问题,为啥非要创建多个对象,各个对象还有引用关系,既不简约,也不可读。学完几个设计模式,最后真心觉得设计模式没用!

直到接手一个大项目时,对设计模式的认识才渐渐有所改变。客户的需求总会变,几天一个样。于是,开发者总要去改动原来的类或方法。好不容易上线,客户需求还在变,于是开发者再回去修改原来的方法。客户新需求确实实现了,但不要求改动的某些功能却意外出现bug,这令开发者非常挠头。

于是,这些前辈们,痛定思定,要设计出一套开发模式,既能保证住原功能的稳定性,同时也能实现客户需求变化。

这才有了设计模式。

2. 面向特定场景

前辈们发现,为了同时实现原功能和新功能,一种设计模式很难做到。不同的需求场景,对应开发出不同的设计模式,久而久之,沉淀下十几种经典常用的设计模式。

这些设计模式大概可分类为:创建对象的设计方法,定义行为的设计方法。至于创建对象的设计模式,前辈们根据具体的场景不同,又制定出几种方法;定义行为的方法,也根据场景不同定义出不同的设计方法。

3. 对象工厂

如何真正理解好一个「设计模式」?相关推荐

  1. 程序员经常说的「设计模式」到底是什么?

    当程序员说去「设计模式」时,你是否会一脸懵逼,到底什么是设计模式呢? 很多人应该听说过设计模式(Design pattern),又或多或少的看过或用过设计模式,但是实际用在开发过程中总有点心有余而力不 ...

  2. 「设计模式」六大原则之三:里氏替换原则小结

    文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...

  3. 线性代数:如何最通俗地理解矩阵的「秩」?

    小时候老师总告诉我们「要有n个方程才能确定地解出n个未知数」--这句话其实是不严格的,如果你想确定地解出n个未知数,只有n个方程是不够的,这n方程还必须都是「干货」才行.从这个角度,初学者可以更好地理 ...

  4. 抖音能成为下一个「微信」吗?

    本文转载自IT之家 从推出抖音搜索.上线抖音支付,到试水本地生活,主打兴趣电商,2021 年才刚过去四个月,抖音却在每个月都有大动作. 抖音是字节跳动旗下用户最多.营收占比最大的产品.张一鸣曾用「动态 ...

  5. 我访问了一个「假」的 GitHub,难道是 PronHub ,还是 GayHub ?

    [回复"1024",送你一个特别推送] 我访问了一个「假」的 GitHub,难道是 PornHub ,还是 GayHub ?都不是,而是下面我要讲的,请仔细阅读. 最近我在浏览掘金 ...

  6. 赴一场开源盛会丨10月29日 COSCon‘22 开源年会杭州分会场,这里只差一个「你」!

    报名地址:https://www.bagevent.com/event/8322877 2022年,世界正在改变,开源创造价值.已经办到第七届的开源年会首次来到杭州与开发者们相聚.你眼中的开源是怎样的 ...

  7. COSCon'22@Hangzhou|10月29日这里只差一个「你」!

    COSCon'22 开源社/KAIYUANSHE    业界最具影响力的开源年度盛会 2022 第七届中国开源年会 (COSCon'22) 来啦! 如果你热爱开源.热衷创新 如果你想饱听各路大咖的主题 ...

  8. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...

  9. 一个「学渣」从零Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的"丰富". 最后的机缘巧合下,走上了前端开发之路,作为 ...

最新文章

  1. 配置交换机端口聚合(思科)
  2. Java基础—异常分类及处理
  3. 《高效程序员的45个习惯》-末篇
  4. 可视化+数据+图表,报告规范这么写才能升职
  5. 生活中要常常鼓励别人
  6. 基因疗法真的有效吗?治疗技术前景又如何?
  7. zabbix4监控mysql_Zabbix4监控Mysql5.7
  8. data 谷歌浏览器更改user 路径_chrome修改默认用户目录
  9. 计算机网络实验5以太网链路帧实验,计算机网络实验-使用Wireshark分析以太网帧与ARP协议.docx...
  10. cni k8s 插件安装_实现K8S中Pod带宽限制
  11. proteus设计教程-数码管使用方法
  12. 篮球/NBA 英语词汇大全
  13. 路由器、交换机、网关
  14. 计算机键盘上的句号键在哪,电脑键盘句号是哪个键
  15. 凌晨四点洛杉矶-致奋斗的我
  16. ios底层是linux,深入iOS系统底层之CPU寄存器介绍
  17. @Controller注解的一些理解吧
  18. python爬虫,python学习,如何用python爬取视频资源
  19. pandas数据日期函数之date_range()、resample()与to_period()
  20. 运维工程师发展受限,那么运维转型大数据是个机会吗?

热门文章

  1. laradock 错误集合
  2. 倾斜摄影模型数据在gis中的应用
  3. 爬山算法改进-探测器-python-全局最优解
  4. Python实现聊天室全双工通信
  5. 符合SL651-2014水文规约遥测终端图片传输详解
  6. Android内存泄漏探究
  7. python center函数_Python-一些实用的函数
  8. 什么是接口测试及接口测试流程
  9. 2022最新Android面试题(大厂Android中高级面试题持续更新~)
  10. 开封微信朋友圈的广告是怎么投放的?如何投放?怎么成为投放方