轻松学习设计模式之设计模式认知篇

今天笔者带领大家一起来学习一下设计模式,首先我们需要了解以下几个问题:

1. 什么是设计模式?

2. 设计模式是用来做什么的?

3. 怎样学习设计模式?

4. 在实际项目中如何应用设计模式?

伴随着上面的问题,我们逐步开始今天的话题,要想开始学习设计模式,我们必须要对它有一个了解,这样才能更好的理解和应用,在我看来设计模式就是一种成熟的面向对象软件开发体系定义的一系列开发标准或者开发方法,它们可以拿来重复的使用,可以被所有开发人员认可,每个人都可以快速的使用。这个纯属个人的一些理解,那我们看一下专家学者如何来定义设计模式的?

一般的定义

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

比较常见的说法

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过 分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

通过上面的简单介绍,大家对设计模式有了一个初步的印象,相信大家自己的心里也有自己的一个理解,随着设计模式在实际项目中的应用,大家将理论和实际相结合,那时大家肯定就会有一个新的认知高度,到时候欢迎大家前来探讨。

接下来我们研究一下设计模式是用来做什么的呢?光有理论不能应用到实践,这不就是常说的“光说不练假把式”,设计模式是经过无数前辈们总结而来,那它肯定是已经可以很好的应用了,否则我们今天也不会花时间来介绍它,闲话不多说,直接来看一下设计模式到底能做些什么?

复用解决方案——设计模式来源众多专家的经验和智慧,它们是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,通过复用已经公认的设计,能够在解决问题时取得先发优势,而且避免重蹈前人覆辙。可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案。

确立通用术语,方便沟通——设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间沟通和交流,使得设计方案更加通俗易懂,开发中的交流和协作都需要共同的词汇基础和对问题的共识。设计模式在项目的分析和设计阶段提供了共同的基准点。

提高观察高度——模式还提供了观察问题、设计过程和面向对象的更高层次的视角,这将可以从“过早处理细节”的桎梏中解放出来。

易于扩展和维护——大多数设计模式还能使软件更容易修改和维护。其原因在于,它们都是久经考验的解决方案。所以,它们的结构都是经过长期发展形成的,比新构思的解决方案更善于应对变化。而且,这些模式所用代码往往更易于理解,从而使代码更易维护。

设计模式有如此多的好处,听下来是不是觉得很想马上开始学习的冲动呢?”前人种树后人乘凉”,感谢前辈们留下如此宝贵的财富,那么要想掌管好这笔财富还需要听我慢慢道来,那就是该如何学习设计模式?

我刚开始学习设计模式的时候,查阅了大量的网络资料有国内有国外的Blog,自己也购买了一些书籍来加深自己的理解,毕竟每个作者都有自己不同的见解,那么如何开始学习,我总结了几点供大家参考。

  1. 找一本合适的书籍,进行入门级学习,比如大话设计模式 ,这本书里面用一些通俗易懂的例子,采用对话的模式,一点点带领读者步入设计模式,里面说的面面俱到,不同的模式都有具体的应用说明。
  2. 有了基础知识以后,不妨在深入了结一下,大家可以阅读一下国外的优秀图书,比如head first design patterns,当然也有中文版的,通过这个可以知道原来设计模式可以中西互通,看看老外的理解是什么,大家都能互相借鉴,最终的目的肯定都是一样的。
  3. 自己此时有了一定的认知,那么就可以通过网络多找一些相关的资料,进行互相交流,可以互相了解别的作者是如何来认知设计模式,能不能融会贯通,加深自己的理解呢。
  4. 学了那么多,最后的目的是应用到实际当中,此时在实际的项目中,就要下意识的想一想,这个功能设计是否需要用一下设计模式,这样能更快的、更高效的完成?使用到后面可能已经不需要想了,自然而然在开发过程中就已经融入了设计模式。当然也不能过于盲目自信,大家也要多借鉴学一下优秀框架里包含的设计模式,对比自己所写的,相信能够有更大的进步。

设计模式在现在的软件开发过程中,已经应用的很广泛了,假如我们已经掌握了设计模式,如何来应用到开发的项目中呢? 学习设计模式必须注意“活学活用”,设计模式不是教条,而是思路,生搬硬套设计模式还不如不用。

要正确使用设计模式,建议参考以下几点:

1.需求驱动

需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用设计模式而使用设计模式。在不合适的场合生搬硬套地使用设计模式反而会使设计变得复杂,使软件难以调试和维护。

2.分析成功的模式应用项目

对现有的应用实例进行分析是学习模式的一个很好地途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。

3.充分了解所使用的开发平台

设计模式大都是针对面向对象的软件设计的,因此在理论上适合任何面向对象的语言。但随着技术的发展和编程环境的改善,设计模式的实现方式会有很大的差别。在某些平台下,某些设计模式是自然实现的,某些模式已经被平台所实现,某些模式存在的上下文已经消失。

这里的平台不仅指编程语言,还包括平台引入的技术。例如,Java EE引入了反射机制和依赖注入,这些技术的使用使设计模式的实现方式有了很大的改变。

4.在编程中领悟模式

软件开发是一项实践工作,最直接的方法就是编程。没有定式很熟却从来不下棋的围棋高手,也没有不会编程就能成为架构设计师的先例。对设计模式的掌握是水到渠成的事情。你可能是“顿悟”,也可能是“渐悟”,但前提必须有相当多的实践积累。当然,并不是不需要看书学习,但实践仍然是最需要重视的。

5.避免设计过度

设计模式解决的是设计不足的问题,但同时也要避免设计过度。一定要牢记简洁原则(Keep It Simple,Stupid,KISS),要知道,设计模式是为了使设计简单,而不是更复杂。如果引入设计模式使得设计变得复杂,只能说我们把简单问题复杂化了,问题本身不需要设计模式。这里需要把握的是需求变化的程度,一定要区分需求的稳定部分和可变部分。一个软件必然有稳定部分,这个部分就是核心业务逻辑。如果核心业务逻辑发生变化,软件就没有存在的必要,核心业务逻辑是我们需要固化的。对于可变的部分,需要判断可能发生变化的程度来确定设计策略和设计风险。要知道,设计过度与设计不足同样对项目有害。

结束语

通过几个问题,我们简单的了解了设计模式是什么,它是用来做什么的,我们该如何学习和使用它,这里只是抛砖引玉,希望大家对设计模式有一个初步的认识,做到心中有数,接下来我们将对每一种设计模式展开探讨,对设计规则进行研读,让读者更好的领略设计模式的风采。

参考资料

https://blog.csdn.net/yang_gang2017/article/details/78690267

http://www.runoob.com/design-pattern/design-pattern-tutorial.html

✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦

作者: Jager 原文:https://blog.csdn.net/CD344549214/article/details/80959189

原文发布于微信公众号 - 架构师之旅(TravelWithFrame)

原文发表时间:2018-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

为啥计算机语言难学?

很多人觉得计算机太难学了,里面很多专业术语都不明白,如果单纯从人类语言的角度考虑,很多计算机语言的确很难直接体现出很人性化的地方,所以要学好计算机语言,首先不是...

34160
来自专栏我的小碗汤

Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?

有人说,算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。而程序就等于算法加数据结构。足以可见,想要在编程之路上走的更长远,数据结...

30730
来自专栏web前端教室

如何训练属于自己的编程思路 | 7月13日晚十点 微课文字版

image.png 编程思想,这四个字博客精深,学起来近乎永无止境。例如JAVA编程思想,用了砖头那么厚的一本书,就为了写明白这四个字。 ? 那编程思路呢?范...

24990
来自专栏CDA数据分析师

分析了数千个技术类面试,我们发现成功面试的背后有这样的规律...

原作者 Aline Lerner 编译 CDA 编译团队 本文为 CDA 数据分析师原创作品,转载需授权 准备技术类面试时需要注意些什么?也许你是刚毕业的大...

21890
来自专栏程序员互动联盟

计算机c语言好学吗?要是想自学应该怎么办?

C语言放在之前都是必备的基础语言,由于指针的存在很多人觉得C语言是一门特别难编程语言,放在十年前C语言是学习编程的必备语言,但整个软件行业发展趋势,趋向于高度集...

14130
来自专栏hadoop学习

什么是自然语言处理技术

自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向...

12870
来自专栏闵开慧

Java自学之道介绍

Java自学之道介绍     Java自学之道是Java入门非常合适的参考资料,里面使用大量生活中的实例,将抽象的理论形象化,让大家更容易理解。同时,里面含有大...

38280
来自专栏ACM算法日常

新手入门 | 算法书籍推荐

公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不...

57120
来自专栏大数据文摘

业界 | Facebook刚刚定义了一个新的时间单位Flicks,造福程序猿

27370
来自专栏大数据文摘

大数据下的统计学:问题优先而非解法优先

189100

扫码关注云+社区

领取腾讯云代金券