我相信很多人一看到这个标题,可能就要准备来喷我了,毕竟自己信奉了多年的东西,自己也花费了大量的时间和精力去学的一个东东,结果被我说成“误人子弟”,心理上和情感上都会很难接受 :)

但是先别急,看完我写的然后再认真思考一下再做决定也不迟。

首先,我要特别强调一下是设计模式的设计理念误人子弟,不是23个设计模式误人子弟,23个设计模式是非常有价值的,都是前辈们的经验总结,有很强的指导意义!

那么,设计模式的设计理念是什么呢?其实就在设计模式书中,第一章的1.6.7章节“设计应支持变化“,中文版原文是这么说的:

上面这个截图的内容就是设计模式所倡导的核心设计理念,一言以蔽之:预测变化!而且是要预测“生命周期内”的变化!

看起来很牛逼啊,预测变化,还要能够预测“生命周期内”的变化。

但是你认真想想就知道了,这怎么可能?

淘宝2004年开始写代码,到2021年已经17年了,这生命周期算17年吧,谁能够在2004年预计2021年?有这个预测能力,早就不写代码了,身价几万亿都有了。

Windows95是95年推出的吧,现在windows系统已经是win11了,生命周期是26年,微软的工程师在95年预测20多年的变化?!

所以,如果你真的在实践中按照“预测生命周期内的变化“,你会发现“一切皆有可能”!你所有的代码都要用上设计模式!

即便你真的吃饱了没事干,按照一切皆有可能的想法去用设计模式,你还是无法应对所有的变化的,现在流行的微服务、云原生,诞生不超过10年,那么10年前的人写代码,怎么预测这种技术趋势?

所以上世纪90年代出版的设计模式一书中提倡的这个设计理念是完全不符合技术发展趋势,也不符合业务发展趋势的

其实《重构》的作者在书中也阐述了类似的观点,书中2.6章节“重构与设计“特别谈到了到底是预测变化,还是通过重构来应对变化,具体如下:

《重构》书中提炼出了个“三次法则”:事不过三,三则重构

我把三次法则改为了更容易理解的“一写二抄三封装“的说法,也就是说:第一次直接写代码,第二次来了类似的需求,拷贝(或者继承等)第一次的代码修改;第三次还有类似的需求,那就重构,此时可以用上设计模式来重构。

事实上,无论是我个人的职业经历,还是各个系统(开源的和商业的)的演进趋势,无一例外的都在证明《重构》的设计理念是正确的,而设计模式的设计理念是错误的!

我们看一下《Apache SkyWalking创始人吴晟:开源如何国际化》这篇文章中,吴晟老板的看法:

所以我们应该做的是:学好23个设计模式,但是记得基于重构的设计理念去应用设计模式!不要一上来就各种神预测然后各种骚操作,这样不但没什么用,还是有很多危害!

为什么我说“设计模式”的设计理念是误人子弟?相关推荐

  1. Java面试通关要点汇总集之工程篇参考答案

    2019独角兽企业重金招聘Python工程师标准>>> 工程篇 需求分析 你如何对需求原型进行理解和拆分 http://www.woshipm.com/pmd/712972.html ...

  2. 网关、负载均衡、服务注册发现什么关系?

    1.微服务为什么要用网关?(首先要理解网关并不是必须的组件,只是一种设计模式或者设计理念) 客户端直接访问各子服务: 微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门 ...

  3. 手写springmvc

    手写springmvc 既然已经手写了spring的IOC,那springmvc肯定也要尝试写写了.手写spring博客:https://www.cnblogs.com/xiaojiesir/p/11 ...

  4. 从1.6W名面试者中收集的Java面试题精选汇总(内附知识脑图)

    首先,声明下,以下知识点并非全部来自BAT的面试题. 如果觉得在本文中笔者总结的内容能对你有所帮助,可以点赞关注一下. 本文会以引出问题为主,后面有时间的话,笔者陆续会抽些重要的知识点进行详细的剖析与 ...

  5. Java面试通关要点汇总集【终极版】

    原文地址:梁桂钊的博客 博客地址:blog.720ui.com 年前,我整理的 Java面试通关要点汇总集 获得了很多读者的肯定,谢谢大家支持.事实上,笔者结合自己过往的面试经验,整理了一些核心的知识 ...

  6. Java 面试题 —— 老梁 Java 面试通关要点汇总集

    点击上方"芋道源码",选择"置顶公众号" 技术文章第一时间送达! 源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 ...

  7. 一位前端 2018 绝地求生记 | 掘金年度征文

    自我介绍 国际惯例先自我介绍.我叫 lien,17 年毕业于双非大学非科班,是一位玩了 3 年视频后期,在网易游戏做了 1 年视频后期与活动运营. 在某次机缘巧合,程序员同事给一些网站给我看濒临灭绝动 ...

  8. java面试问题终极整理

    https://www.tuicool.com/articles/NJNBv2J 简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区 ...

  9. java基础流程分析,及原理解析,因为bu满,而qian行

    基本功 =>同样的流程 别人的解释*=>基础二 面向对象的特征 四个基本特征:抽象,继承, 封装, 多态 抽象: 就好比用程序描述一个人,肯定得抽象的通过(身高,体重,年龄 , 胖瘦)这些 ...

最新文章

  1. java arraylist 实现原理_Java进阶--深入理解ArrayList实现原理
  2. 献给写作者的 Markdown 新手指南
  3. VMware安装以及安装Window7教程
  4. 用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...
  5. 美味奇缘_轻松访问和管理您的美味书签
  6. python是动态语言
  7. angular中的$q服务
  8. C语言输出九九乘法口诀表
  9. 重新审视自己,把握真实瞬间 _大前研一
  10. 机器学习之线性回归 Linear Regression(二)Python实现
  11. 为什么网站要使用手机验证码?
  12. MacOS系统安装Qt教程
  13. 个人使用计算机习惯、注意事项及日常维护
  14. Python实操:正态分布检验
  15. java队名,《JavaWeb程序开发入门》课后练习(含答案)
  16. laravel+ajax分页操作
  17. 人脸表情识别——fer2013
  18. html代码 小球上下波动,HTML5CSS3特效-上下跳动的小球-遁地龙卷风
  19. 杭州数澜联合创始人 \u0026 CTO 江敏:大数据思维和大数据冶炼 —— 拒绝坐着金山吃馒头...
  20. 《黑客与画家》读书笔记(四)

热门文章

  1. Chrome打包扩展程序错误,清单文件缺失或不可读
  2. viz::viz3d报错_我可以在Excel中获得该Viz吗?
  3. 【CRH】列车通过曲线时,曲线半径、超高值与车速的关系
  4. 7033: Lounge Lizards(lis)
  5. Memcached完整教程
  6. 陕西邮电职业技术学院计算机系怎么样,陕西邮电职业技术学院的办学实力怎么样?...
  7. 软件项目开发中的百分之九十效应
  8. Linux aarch64 编译 qemu 搭建实验平台
  9. java开发级别t4,腾讯技术等级T系列解读,T4等于百万年薪加股份
  10. 天干地支与阴阳五行的关系