开发软件或者做软件项目的时候,很难事先确定需求,甚至需求很快地变化着,为了应对需求的变化和增减,有时候不得不 改变或重构代码,甚至需要大幅度修改代码或重新来过,这大大浪费了成本,而且开发人员也会很郁闷,但是需求变化有时候是常态,所以 ,开发人员不得不寻求好的设计方法,即使需求怎么变,也能尽量减少代码的修改工作量,使代码有更大的伸缩性和可拓展性 以及很好的可重用性,能很好地应对需求的变化以及时间、应用场景的变化。那
设计模式
可以帮上大忙。
概述
设计模式
是很多前辈和成功项目经验的积累,大都是一些相对优秀的解决方案,很多问题都是典型的、有代表性的问题。
学习设计模式,可以学习到众多前辈的经验,吸收和领会他们的设计思想,掌握他们解决问题的方法,就相当于站在这些巨人的 肩膀上,可以让我们个人的技术能力得到快速的提升。学习设计模式虽然有一定的困难,但绝对是快速提高个人技术能力的捷径。
设计模式是解决某些特定问题
的解决方案
(或者范例
)。当我们再次面对这些问题的时候,就不用自己从头来解决这些问题,服用这些
方案即可。
大多情况下,这或许是比自己从头来解决这些问题更好的方案。一是你未必能找到比设计模式更优秀的解决方案;另外,通过使用 设计模式可以节省大量的时间(减少选择方案和应对需求重构代码的时间),你可以把节省的时间花在其他更需要解决的问题上 或者干脆用来享受生活。
学习设计模式的层次
学习设计模式大致有以下三个层次:
- 基本入门级
要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么场景下、出现了什么样的问题、采用何种方案来解决它,并 能够在实际的程序设计和开发中套用相应的设计模式。
- 基本掌握级
除了具备基本入门级的要求外,还要求能够结合实际应用的场景,对设计模式进行变形使用。
在实际开发中,经常会碰到与标准模式的应用场景有一些不一样的情况,此时要合理地使用设计模式,就需要对它们做适当的 变形,而不是僵硬地套用了。当然进行变形的前提是要能准确深入地理解和把握设计模式的本质,万变不离其宗,只有把握 住本质,才能够确保正确变形使用而不是误用。
- 深入理解和掌握级
除了具备基本掌握级的要求外,更主要的是:
要从思想上和方法上吸收设计模式的精髓,
并融入到自己的思路中,在进行软件的分析和设计时,
能随意地、自然而然地应用,就如同自己思维的一部分。
在较复杂的应用中,当解决某个问题的时候,很可能不是单一应用某一个设计模式,而是综合应用很多设计模式。例如,结合某个 具体的情况,可能需要把模式 A 进行简化,然后结合模式 B 的一部分,再组合应用变形的模式 C ……,如此来解决实际问题。
更复杂的是除了考虑这些设计模式外,还可能需要考虑系统整体的体系结构、实际功能的事先、与已有功能的结合等。这就要求在 应用设计模式的时候,不拘泥于设计模式本身,而是从思想和方法的层面今次那个应用。
简单说,基本入门级就是套用,相当于能够依葫芦画瓢
。很机械;基本掌握级就是能变形使用
,是从思想和方法的
层面去理解和掌握设计模式,就犹如联系武功到最高境界,“无招胜有招”了。要想达到这个境界,没有足够的开发和设计经验,
没有足够深入的思考,是不太可能达到的。
如何学习设计模式
学习设计模式是一个很长的过程。
- 首先要调整好心态,不要指望一蹴而就,不可浮躁。
学习和掌握设计模式需要一个过程,不同的阶段看这些设计模式会有不同的领悟和感受。如果感觉“懂”设计模式,却不会再 实际项目中应用设计模式,那是因为你“懂”的成都不够。
- 学习设计模式的第一步:准确理解每个设计模式的功能、基本结构、标准实现,了解结合使用它的场景以及使用效果。
- 学习设计模式的第二步:实际的开发中,尝试着使用这些设计模式,并反复思考和总结是否使用得当,是否需要做一些变化。
- 学习设计莫斯的第三部:再回头去看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟,一边看一边 结合着应用经验来思考。可以从不同的角度对设计模式进行思考。
- 第四步:多次重复学习设计模式的第二步和第三步。也及时说在实际开发中使用,然后结合理论思考,然后再应用,再思考…… 如此循环,反复多次,知道达到对设计模式基本掌握的水平。
事实上,到了基本掌握设计模式的水平后,最后能达到一个什么样的高度,因人而异,需要看个人思维水平和理解水平以及实践 水平。对于这个阶段,只有一个建议,那即是反复地、深入地思考,别无他法。到了思想的层面,就得靠“悟”了。
设计模式的原则
后面你会发现,很多设计模式都是基于以下一个或几个原则提出的。
- 隔离变化、独立封装变化,减少变化部分对稳定部分的影响;
- 对接口(抽象层)编程,而不是针对实现编程;
- 多用组合,少用继承;
【注意】本文属于作者原创,欢迎转载!转载时请注明以下内容:
(转载自)ShengChangJian's Blog编程技术文章地址:
https://ShengChangJian.github.io/2017/12/about-design-pattern.html
主页地址:https://shengchangjian.github.io/