为什么要学设计模式:本质价值与收益陈树义

有些人说,我看有些人也没学过设计模式,但他们代码也写得挺好啊。这里我想表达我的第二个观点:抽象思维才是设计模式的内核。有些人接触的项目多了,其在项目中不知不觉地就用到了一些设计模式。这些人一般都具有一个共同点:抽象总结能力强。他们接触到了东西多了,会不断思考他们的共同之处,然后试图总结出经验。如果你具有这种抽象的思维,那即使你没看过设计模式,你也能写出类似于设计模式的代码。甚至到最后,你也可以设计出一种独特的设计模式。到时候你可能就成为了自创门派的「一代宗师」了。

对于设计模式,不少人也有很多见解。有的人觉得设计模式名过其实,实际编程中远远没有那么重要。在我看来,设计模式存在即合理,至少它有下面三点实在的意义。

设计模式是经验沉淀,便于后来者快速学习。人类之所以能一代更比一代强,靠的就是用文字符号实现经验传承。而在编程领域,我们的设计模式其实就是前人在实战中的经验总结,他们将这些经验归纳出来成为设计模式。

对于经验不是很多的人来说,学习设计模式可以让他们有个初步的印象,等到他们有对应的项目经验时,他们可以更好地应用上。而对于项目经验丰富的人来说,设计模式可以丰富他们的项目场景,进一步提高他们对于复杂场景的掌控。

设计模式可以方便交流。有些同学会觉得一些设计模式自己都用过,只不过先辈们给它起了个名字而已,没什么大不了的。但不知道这位同学是否有思考过:为什么要给各个设计模式起一个名字?

我们的知道有显性知识和隐形知识之分。显性知识就是大家一说,我们都能听得懂的。例如锤子可以用来钉钉子,例如搜索引擎可以用来搜索知识。而隐形知识则是指那些我们做事的经验,我们很难描述出来的东西。

我们这里说的设计模式,落地下去其实就是对应的代码结构。但我们如何将这种实战中的经验描述出来呢?一个最直接的方法是:我每次跟别人交流的时候,我都说:你这个创建一个接口,然后这个类继承这个接口,然后blabla……可能你说了半天,人家也还没听懂。即使听懂了,你下次还是得叽里呱啦说半天,别人才能听得懂。

怎样才能让别人一下子领会到我们的意思呢?很简单,就是给这种代码结构起个名字嘛!这也才有了工厂方法、策略模式、模板模式这些名词。当你跟别人一说这个名字,别人就知道是怎么回事,这不就大大提高了沟通效率嘛!

生活中其实也有很多类似的例子。我们为什么会有很多思考模型,例如:SMART模型、PDCA模型?本质上就是用来帮助记忆,以及便于沟通的。

想想「五花肉」这个词,可能在古代还真没这个词。那我们要怎么形容?古代人说:就是那种一点肥、一点瘦的猪肉。现代人三个字搞定:五花肉!多高效啊!

聊完了设计模式的本质和意义,最后我们聊聊设计模式的好处。

提高系统设计能力,代码更简洁,更易于扩展。在互联网公司干过的都知道,研发流程里最确定的东西就是变化本身。需求是不可能一成不变的,唯一不变的就是需求会一直变。这就对研发人员提出了更高的要求,需要在系统设计的时候考虑到后续的扩展。

设计模式本质上就是对变化的封装,用结构化的代码结构去承载变化的需求。当你明白这一点后,你需要做的就是去分析出系统中变化的部分,之后采用合适的设计模式(代码结构)去实现。只要变化的部分拆解得好,那你就有足够强大的结构去应付变化的需求。

在这一个层次上,考验的其实是你对业务的理解,还有你掌握的设计模式的数量。这些将直接决定你是否能抽离出变化的部分,而抽离出变化的部分之后,你能不能找到合理的设计模式去承载。如果找不到,那你的「抽象思维」层次决定了你是否能自我创造一种设计模式。

设计模式可以帮助阅读源码、写框架。在我们现在使用的不少框架中,都使用了很多的设计模式。越是底层的系统,他们就需要越抽象,他们使用到的设计模式就越多。例如:Spring框架中使用到的设计模式就多达十几种,有工厂模式、代理模式、模板模式等等。

当你理解了这些设计模式之后,你再去阅读源码,你就能够更快速地领会框架作者的意思。否则你看源码只会像看天书一样,完全看不懂,还吐槽这代码怎么这么垃圾。

设计模式有利于你面试。这点可以说是挺功利的一点,但也确实是最实在的一点。工作三年以上的工程师,至少要会学习一些设计模式。只有掌握了合理的设计模式,你写的功能才能更易于扩展。这也是我们这些工作多年的老码农,和刚毕业的小年轻的区别。

如果你工作了好几年,写代码的时候还是从头写到尾短平快,不考虑一点扩展性,那么你可能真的很容易被替代。现今的面试中,也越来越考察面试者的代码编写能力了。掌握设计模式的思维方式,可以帮助你在面试中拿到更多的筹码、赢得更高的薪资。

设计模式本质上是用于承载变化的业务逻辑,使写出的代码简洁、易扩展。它们就像武功中的招式,但具体的招式并不是目的,抽象思维才是设计模式的内核。掌握了抽象的思维,你也能设计出属于自己的模式。

设计模式是前人经验的总结,便于后来者快速学习。设计模式与菜名、标签一样,是对代码结构的一种描述,便于我们交流。掌握了设计模式,能够让我们提高系统设计能力,使系统更易于扩展。同时也能让我们读源码、写框架时事半功倍。

THE END
1.史上最强的权限系统设计攻略(下)ABAC在复杂嘲下的实现思路二、权限系统设计方案 1、ABAC设计本质 我们从之前的文章中能够明白,ABAC设计的目的是为了能够满足控制请求者在某些条件下是否对请求数据具备某个操作(API) 的能力,目前来看,ABAC还暂时没有什么标准建模(policy不是由实体组成),一般都是policy的语法设计,这个指的就是用一个json或者一个xml来描述一个policy,这个polic...https://developer.aliyun.com/article/1251284
2.原研哉:在寂静中寻找存在与设计的本质基于“日常设计”的理念,原研哉曾策划组织过一个题为“再设计:21世纪日常用品”的展览,邀请32名日本设计师,让他们回到原点,重新审视自己生活周遭的设计,以最平易近人的方式来探讨设计的本质和内涵。而这些“再设计”的物件包括卫生纸、火柴、茶包等等,素材很质朴,设计出来的作品却令人惊叹。原研哉强调:“在21世纪的...http://www.ringtown.net/info/?id=658
1.设计的本质是什么?设计的本质是什么? <blockquote>Future Simple的创始人兼CEO Uzi Shmilovici写了一篇文章,里面谈到了设计应该关注的核心问题,我们编译如下,供各位参考。</blockquote> 出色的设计很好,但是用户体验最重要。Path 2.0的设计就很出色,但从作者自己的感受来说,Path实际并没有没有什么用户,本人仅用过两次,周围使用Path...https://www.36kr.com/p/100143.html
2.平面设计的本质是什么电脑知识平面设计是一门艺术与技术相结合的学科,它通过运用各种视觉元素和设计原则,创造出具有美感和功能性的平面作品。在当今信息爆炸的时代,平面设计的重要性愈发凸显。本文将探讨平面设计的本质,从不同角度解读其内涵和意义。 工具原料: 平面设计师在创作过程中需要使用各种工具和原料,包括计算机软件、设计素材、字体库等。这...https://smart.163987.com/jiaocheng/103214.html
3.什么是设计?设计的本质是什么设计的本质是什么 设计是为了解决问题 设计的首要 因素: 发现 存在问题 设计都带有缺陷, 为了解决现有问题,我们引入了A设计,但同时带来了缺陷a;为了解决a问题,接着我们引入了B设计... 产品设计最终选择的是:一次一次引入设计,直到所有问题都解决,并没有带来最新问题,问题闭环,或者我们能够接受未解决的新问题...https://blog.csdn.net/shaqimia/article/details/18869851
4.设计的本质是创新美啊应放天教授说设计给他的最大感受是温暖,他也最想把设计温暖的力量,传递给所有人。他谈到了设计和文化的融合,不应该抛弃文化来做设计,但是设计也不应该受限于复古、民粹,设计的本质是创新,是寻找真善美的平衡。 重点获益 ·了解什么才是设计的本质 ·了解设计如何与文化相结合 ...https://meia.me/course/169084
5.未来课程如何设计学习的本质是什么 余安敏(上海市“双名工程”导师及基地主持人) 未来的不确定性给未来课程和教育带来了极大的挑战。我们在设计未来课程时,应该更多地考虑学习的本质。有些教师对学习的认识比较简单,认为学习无非是传授知识,然后解疑释惑,再之后做练习题。学生经过大量训练后考好每次考试,打通升学路径……但这并非是...http://www.jyb.cn/rmtzgjsb/201911/t20191105_272754.html
6.校友动态张绮曼:一个人,一部环艺设计史我认为新中式是不存在的。如果一旦叫新中式,在中国就成为一个主流流派。要讲新中式,首先要讲什么是中式。我们看到和提到最多的是明清时代的遗存。但实际上在汉代、唐代、宋代的文化都达到了高峰。中式都没有搞清楚,就不能提什么是新中式。 《设计》:您认为环境艺术设计的本质是什么? https://www.ad.tsinghua.edu.cn/info/1061/8620.htm
7.如何系统性地进行ARPG中的怪物设计?——玩法篇例如原神的流血狗机制针对性过于明显:穿盾伤害、难以聚怪,都是直接针对当时版本热门卡钟离和温迪定向性设计,给玩家体验、观感较差,容易形成“骗氪”既视感。如何确定设计目的在此不表,之后会具体论述,我们先继续讨论其他的问题。 原神流血狗 2.2玩法设计的本质是什么? https://www.hxsd.com/information/13966/
8.设计到底是什么?我梳理了4位顶尖大师的答案优设网设计不同于科学(Gregory,1966;Lawson,1980;Cross,2006)。科学家们关注问题,关注存在的规则,而设计师们关注解决方案,关注如何达到期望的结果;科学的方法用来发现已存在事物的本质,而设计方法却用来发明尚不存在的新事物。而有时候,设计又被看作是艺术性和技术性的结合,需要同时结合实际的理性与创造的想象力。 https://www.uisdc.com/think-what-design-is/
9.工业经济领域百问百答41.什么是智能制造?智能制造的本质与核心是什么? 答:智能制造是基于新一代信息技术与先进制造技术深度融合,贯穿于设计、生产、管理、服务等制造活动各个环节,具有自感知、自决策、自执行、自适应、自学习等特征,旨在提高制造业质量、效益和核心竞争力的先进生产方式。 https://www.zjk.gov.cn/content/bwbd/197960.html
10.百家观点丨解构琚宾在作品中,将“当代性”、“文化性”、“艺术性”共溶、共生,以此作为设计语言用于空间表达。从传统与当下的共通、碰撞处,找寻设计的灵感;在艺术与生活的交错、和谐处,追求设计的本质。在历史的记忆碎片与当下思想的结合中,寻找设计文化的精神诉求。 这是琚宾在官网写下的设计理念,我们只抽取关于中界观的词汇:共生...https://www.douban.com/note/828727175/
11....最新资讯对于设计项目的出发点、观点、价值观是什么?针对一个项目怎么去找到最正确的站位和定位?从这两位大师的身上,我的收获都是巨大的,他们不仅指导了我的技能、技艺、技巧,还有对设计本质价值观的态度,这些在我看来都是非常珍贵的,也是做好设计师的先决条件。我很庆幸在我毕业的前几年时间能和这些大师、巨匠有比较多的...http://www.zjypxzx.com/c/2022-07-13/500820.shtml
12.宝马的B58发动机和S58发动机有什么本质区别?B58的设计是环保+省油+降低制造成本 S58是达到环保下保留高性能设计+降低成本 从架构来说B58的设计不适合动力压榨 首先从中缸结构来说 B58是买菜发动机B48/B38,增加2个汽缸 他们的活塞连杆都是通用的 而且采用了省油设计 曲轴偏置+活塞销偏置技术 https://www.yoojia.com/ask/17-12020456836908452222.html