当前位置: 首页 > 科技观察

闺蜜非要问我什么是设计模式!

时间:2023-03-20 15:01:49 科技观察

让我们和CodeBoy一起学习更多关于设计模式的知识吧!你能从这篇文章中学到什么?什么是设计模式?我们为什么要学习设计模式?常用的设计模式有哪些?我们应该如何学习?设计模式?什么是模式?什么是设计模式?什么是模式?我们从字面理解吧。它可以看作是一种方法,两者结合起来就是一种“标准化方法”,称为模型。举个很恰当的例子:中国四大发明之一,活字印刷术的诞生过程就是一个模型的产生。在活字印刷之前,每页文字都刻在一块木板上。如果一个字写错了,就得重新刻上。错误率高,成本高,效率低。后来演变成了每个角色单独的小板。打印文章时,只需根据需要在大板上排列不同的字符即可。这些字符不仅在雕刻时出错率低,而且在不同的物品中还可以重复使用。这是一种标准化方法的演变,也是一种模式的诞生。每个模式都描述了我们在生产环境中遇到的一类问题,并给出了解决这个问题的核心。所以当我们遇到此类问题时,使用这些解决方案可以避免重复工作。简而言之:模式是一组成功或有效的解决方案,用于解决人们在给定环境中遇到的某一类反复出现的问题。上面我们学习了模式,但是有些朋友应该说了,我们是软件开发人员,知道模式有什么用呢?别着急,接下来我们就来认识一下软件模式。软件模式,如果按照我们刚刚理解的“模式”,软件模式可以理解为:软件生命周期中的一些标准化方法。我们知道,软件的生命周期不仅仅是开发周期。软件前期的需求分析和后期的迭代维护都属于软件的生命周期,所以每个阶段都会有相应的模式。作为开发人员,我们接触最多的是开发阶段,设计模式应该是开发阶段用的最多的。那么什么是设计模式呢?根据网上搜索,设计模式(DesignPattern)是代码设计经验的总结,被反复使用,为大多数人所熟知,分类编目,用于复用。代码,让代码更容易被别人理解,保证代码的可靠性。其实,说白了,设计模式就是经过无数填坑人的努力总结出来的,所有开发者公认的一套标准化的代码设计方案。设计模式一般包括模式名称、问题、目的、解决方案和效果等元素,其中关键元素是模式名称、问题、解决方案和效果。模式名称(PatternName)用一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式,方便开发者之间的交流。大多数模式都是基于它们的功能或模式结构。命名;问题(Problem)描述了什么时候应该使用模式,它包含了设计中的问题和问题存在的原因;解决方案(Solution)描述了一个设计模式的组件,以及这些组件之间的相互关系、各自的职责和协作方式,通常解决方案是通过UML类图和核心代码来描述的;效果(Consequences)描述了模式的优点和缺点,以及使用模式时应该权衡的问题。个人觉得这些已经很全面的说明什么是设计模式了,接下来我打算从这四个方面对每一个模式进行分析。为什么要学习设计模式?了解了设计模式之后,我们肯定会有以下疑问?我们为什么要学习设计模式?它解决了我们发展中的哪些问题?通过学习,我认为学习设计模式可以解决以下三个问题:12.避免重复轮子学计算机我们一定听过“不要重复轮子”这句话。设计模式首先解决了我们重复造轮子的问题。举个栗子:我们不学设计模式的时候,用的是图片加载或者其他工具。我们一定是编程了很多,走了很多弯路,填了很多坑,才想到“还是封装一下吧,这样单例比较好管理”,于是开始封装,费了一番功夫,终于打包成功了,学习了“单例模式”后,我发现,咦,我不就是这样打包的吗?如果我早点学习设计模式,我会。。..因此,在时间就是金钱的今天,设计模式无疑会帮助我们提高开发和设计效率,但不能保证一定会提高。2.降低沟通成本。我们不能一直独立开发,我们会肯定是和别人协调开发的,只要有合作,就少不了沟通,设计模式也可以解决开发者之间的沟通问题,再举个例子:你从头开发一个项目,后来项目做大越来越大,功能模块越来越多,多到每天加班都做不完。不干了,然后老板就开始给你各种蛋糕了……”(很远),这时候你问老板需要帮手,然后老板给你招了一个小弟,你需要带他熟悉项目,你告诉他,我用“singletonmode”这个地方,这里我用的是“Decorator模式”,这里是“工厂模式”,然后小弟一头雾水。那你得下功夫解释一下你是怎么实现这些模式的。。。很明显,小弟不懂设计模式,不然可以节省很多时间,多写几个bug。可以理解,所以不管你用的是什么编程语言,做的是什么类型的项目,甚至是在一个国际化的开发团队,面对同一个设计模式,你的理解和别人是一样的,因为设计模式是交叉的-语言,跨-平台、跨应用、跨境。3、优秀的可重用性和可扩展性我们在大学里学过,一个优秀的软件需要具备六个特性:功能性、可靠性、易用性、效率、可扩展性、可维护性和可移植性。但是很多开发者在开发的时候并不会去考虑这些东西。因为国内的开发环境大多是先出结果,再谈问题。因此,如何在有限的时间内开发出优秀的软件,是成为优秀开发人员的必由之路。大多数设计模式都考虑了系统的可重用性和可扩展性。比如:一个函数在代码中经常用到,我们可以使用“单例模式”来封装它,如果考虑到某个地方的可扩展性,我们可以使用“装饰模式”等等。为什么要学习设计模式?经过无数前辈的总结,常用的设计模式主要有23种,而这23种设计模式可以分为三类:创建模式(5种)、结构模式(7种)和行为模式(11种)。其中,创建模式主要用于描述如何创建对象,结构模式主要用于描述如何实现类或对象的组合,行为模式主要用于描述类或对象如何交互以及如何进行交互。分配职责。下图显示了23种模式的具体分类:表格显示如何学习?在正式开始学习之前,先分享一下我对设计模式学习的看法。从大学开始接触设计模式,毕业后从事开发工作近三年。这段时间,体会到了设计模式带来的便利,也明白了一些朋友对设计模式的看法。在此分享一下自己学习设计模式的心得,供大家参考:1、不要害怕。工作中和很多同事聊过设计模式,他们的反应大多是“那个感觉很难,现在也没有去学了。””很多人还没开始就退缩了,其实掌握设计模式并不难,我们只需要将它们拆分,熟悉每一个模式,看到并模仿每一个例子,多思考,多实践,一定是掌握了。关键是开始学习。2.抓住重点。其实我们学习每个设计模式只需要抓住以下几点,就可以大致掌握这个模式。这个设计模式解决什么问题呢?下你需要在什么情况下使用它?这种设计模式的结构图是什么?这种设计模式的优点和缺点是什么?你能在现实和代码中给出哪些使用这种模式的例子?3.亲自实践。古语有云:“纸上谈兵终觉浅,知之必自行。”最好是看十遍例子再敲一遍代码。4.不要不要滥用。不要滥用模式,不要只学一个or两种模式并尝试在代码中应用它。每种模式都有自己适用的场景,不能为了使用模式而使用模式。请明确点。具体分析,滥用设计模式很有可能写出一堆垃圾代码。5.学习和使用。这里直接用刘伟老师的总结来说明。设计纹样的“高超”境界:“手中无纹,心中有纹”。模式使用的最高境界是你不再知道某个特定设计模式的定义和结构,而是会灵活地选择一种设计方案[实际是某种设计模式]来解决某个问题,而设计模式已经成为开发技能的一部分,唾手可得,“内功”和“动作”融为一体,要达到这个境界,不是看某本书或开发一两个项目就能达到的,需要不断的沉淀和积累,因此,不要急于学习模式,而是要循序渐进。模式从不保证任何事情,它不能保证你将能够制作可重用的软件,提高你的生产力,它不能保证世界和平。模式不能代替软件系统的创造是人来完成的,只能给那些缺乏经验但有才华和创造力的人带来希望。