设计模式是从不同具体项目中总结出来的通用经验,从具体到抽象的过程相对容易,然而从抽象的模式套用到具体场景却很困难,如果没有足够的经验或者思考只会做出拙劣的设计。设计模式是从具体场景中总结的解决方案,它会站在一个更高的角度提炼实现中的关键细节,这样才能提供更好的通用性。
所以:
设计模式是软件设计中常见问题的典型解决方案。
- 每个模式就像一张蓝图,你可以通过对其进行定制来解决代码中的特定设计问题。
- 设计模式定义了一种让你的团队能更高效沟通的通用语言。
- 设计模式是经验沉淀,便于后来者快速学习。在编程领域,我们的设计模式其实就是前人在实战中的经验总结,他们将这些经验归纳出来成为设计模式。对于经验不是很多的人来说,学习设计模式可以让他们有个初步的印象,等到他们有对应的项目经验时,他们可以更好地应用上。
- 能够提高你对系统的设计能力,代码更简洁,更易于扩展
需求是不可能一成不变的,唯一不变的就是需求会一直变。这就对研发人员提出了更高的要求,需要在系统设计的时候考虑到后续的扩展。设计模式本质上就是对变化的封装,用结构化的代码结构去承载变化的需求。 当你明白这一点后,你需要做的就是去分析出系统中变化的部分,之后采用合适的设计模式(代码结构)去实现。只要变化的部分拆解得好,那你就有足够强大的结构去应付变化的需求。
- 设计模式可以帮助阅你读源码、写框架
在我们现在使用的不少框架中,都使用了很多的设计模式。越是底层的系统,他们就需要越抽象,他们使用到的设计模式就越多。例如:Spring 框架中使用到的设计模式就多达十几种,有工厂模式、代理模式、模板模式等等。
- 学习设计模式有利于你面试
这点可以说是挺功利的一点,但也确实是最实在的一点。工作三年以上的工程师,至少要会学习一些设计模式。只有掌握了合理的设计模式,你写的功能才能更易于扩展。这也是我们这些工作多年的老码农,和刚毕业的小年轻的区别。
既然设计模式有这么多的价值,那么学习这个东西是不是轻而易举的事情?实践证明,学习设计模式并不是一件容易的事情,主要的困难在于以下几个方面:
- 模式是抽象经验的总结,代码晦涩难懂,对新学者来说难以入门。
由于设计模式是技术大牛的经验总结,本身就比较抽象,代码实现让初学者感觉云里雾里的,勉勉强强看懂代码但是无法领略到其精髓,在使用中容易偏离初衷,给某些学者一种“设计模式”无用的假象。
- 讲解模式的一些书籍或者教程太注重实战案例,忽略了模式真正的价值,让初学者没有理解模式的意义
想要学好某种设计模式,首先要充分理解某种模式的初衷,深刻认识到模式的价值,才能够在后面的使用中应用到,如果一开始对模式一知半解,那么后面的使用中就出现“生搬硬套”模式的情况,对软件设计更是一种灾难。
- 模式需要长时间的历练和实战经历的巩固才能举重若轻,运用自如
很多初学者以为简单的看了一些教程就掌握了设计模式,其实不然,从学习到应用自如需要一个长期的实战演练过程,非一朝一夕之功,所以,很多初学者学习一半就中途放弃了。
相比上面学习模式的难度而言,本教程主要针对的是想对设计模式有个初步认知新手,为后面进一步学习和应用打下基础。本课程有以下几个特点:
- 课程通俗易懂,适合于初学者
本课程采用通俗易懂的生活化场景为案例,采用大话设计模式的思路,轻松带领初学者入门设计模式,让初学者在毫无压力的情况下理解模式的基本概念和使用价值。
- 采用Java语言,代码简洁,易懂,对初学者语言技能要求不高
Java这么语言使用非常广泛,本教程以Java为模式语言,将采用简洁的语法,生活化的案例将模式落地为代码实现,对初学者学习毫无压力。
- 两首歌的时间,就可以学习一种设计模式
区别于其他教程,本课程摒弃了无异议的长篇大论,每个模式采用极简的介绍和生动的案例,让初学者能够非常快速的学习模式的基本概念,机构和使用场景,同时了解模式的代码实现,整个过程不到十分钟就可以搞定,简单又实用。
本课程采用传统的模式分类方法,将23中模式归类为:创建型,结构型和行为模式,每一种类别都独立位于代码源文件目录的独立文件夹下。
每个模式的文件夹下面都有对应的README,用于介绍模式的定义,基本概念、基本结构和使用场景。同时每个模式的文件夹下面都包含了对此模式的通用案例的代码实现,你可以轻松进行学习。
同时,本教程采用工程化的方式,你可以通过github将代码下载到你本地,使用./gradlew clean build来运行该项目。同时,每个每种模式都有对应的测试文件,可以使用./gradlew test来运行测试。
当然,要学习本教程,你需要有一点儿Java基础和面向对象设计的基本知识,这样你在阅读本教程的时候会事半功倍。
如果你在学习的过程中遇到了难点或者教程中的瑕疵,欢迎来这里提交你的问题。
最后,祝你学习愉快。

