真正理解设计模式

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

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. Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换...
  2. python二十四:python练习题
  3. python牛顿迭代法_python-来自维基百科示例的Gauss-Newton方法的实现
  4. 常用的排序算法的时间复杂度和空间复杂度 .
  5. easyUI 运用窗口和form表单制作导出功能
  6. Exynos4412 内核移植(七)—— 内核相关知识补充
  7. R语言第八讲 评估模型之交叉验证法分析案例
  8. huffman图像编码C语言,Huffman编码的c语言实现
  9. NB-IoT将给智能锁行业带来哪些影响?
  10. Flutter进阶—实现动画效果(三)
  11. JavaScript-预解析(变量提升)
  12. 【水果识别】基于matlab GUI自助水果超市【含Matlab源码 594期】
  13. Java-Android 之单选按钮的运用
  14. 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
  15. Fedora Linux 14百度云下载,Fedora Linux 14下载
  16. jTopo 功能完善
  17. 让你的PPT更出彩的时间轴这样画!
  18. python百度经纬度转google经纬度
  19. 解析几何 直线与平面 直线与平面(1.2)
  20. LPVOID lpParameter

热门文章

  1. 性格决定命运之王安石
  2. 小白web学习笔记--信息收集
  3. 如何从 Python 字典中删除键
  4. 集线器hub、交换机switch、路由器router 的区别
  5. 华为mate40可以用鸿蒙系统吗,华为mate40用什么系统-采用鸿蒙OS系统么
  6. 健身不成功?你要了解这些~
  7. Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL、Set DEFAULT
  8. 源码分析七大设计原则之开闭原则(Open Close Principle)
  9. Excel中row函数的使用方法
  10. 【专业扫盲】集成电路领域的核心会议与期刊