从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述
Posted 李阿昀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述相关的知识,希望对你有一定的参考价值。
在上一讲中,明确了设计模式这门课所要学习的内容之后,接下来,我们就得开始正式步入设计模式这门课的学习中了,当然,我也祝大家能在设计模式这门课程中能够学到很多东西,也不枉我这一片苦心了!
软件设计模式的产生背景
首先,我们来看一下第一章中的第一部分内容,即设计模式概述。而在设计模式概述里面,我们第一个要明了的就是软件设计模式的产生背景。因为我们既然要学习软件设计模式,那么就得知道一下它的背景,我想这是毋庸置疑的。
"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
从这句话中我们可以知道,软件设计模式来源于建筑领域的设计。
1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了253种关于对城镇、邻里、住宅、花园和房间进行设计的基本模式。
从这句话中,我们第一次了解到了设计模式,只不过这个设计模式,它是属于建筑领域的设计模式。
1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995年艾瑞克·伽马、理査德·海尔姆、拉尔夫·约翰森、约翰·威利斯迪斯等4位作者合作出版了《设计模式:可复用面向对象软件的基础》这一本书,在此书中收录了23个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这4位作者在软件开发领域里也以他们的"四人组"(Gang of Four,简称GoF)著称。
很明显,我们所要学习的设计模式其实就是以上提到的这23种设计模式,而且,另外一点,大家也一定要记住,GoF我们在后面也会遇到,它指的其实就是以上这4个人的一个简称。
软件设计模式的概念
知道了软件设计模式的产生背景之后,我们就得来了解了解软件设计模式的概念了,软件设计模式的概念如下:
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。
这句话读起来还是有点绕口的,不过大家一定要知道一点,就是软件设计模式它并不是什么新的技术,而是代码设计经验的一个总结,即总结出来的一些套路。谁总结出来的呢?其实就是软件开发的那些前辈们,他们在软件开发过程中遇到了一些问题,然后针对这些问题他们提供好了解决的方案,而这些解决方案就是总结出来的一些套路,也可以说成是设计模式。
那么,以后我们在设计咱们自己的软件过程中,就可以将这些设计模式套用到我们自己的软件中了,从而使得我们的程序变得更加完美,软件设计得更加完美。
学习设计模式的必要性
为什么要学习设计模式呢?我们可以看一下下面这句话。
设计模式的本质是面向对象设计原则的实际应用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
我在上面也已经说过了,设计模式它并不是一门新的技术,而是对于我们之前学习的面向对象开发的一个实际的应用。之前我们学完了面向对象开发之后,想必你会有很多感触,我想第一个感触就是面向对象开发它到底有什么用,以及在我们以后真正的软件开发中又能起到什么作用?我想你只要学完设计模式这门课,就能有更深的体会了,因为实践出真知嘛!
以上那句话的后半句中的类的关联关系和组合关系
,现在如果你还不理解的话,也没关系,因为后面我会对它作一个详细的讲解。
其次,我们应该还要知道正确使用设计模式所具有的如下几个优点。
- 可以提高程序员的思维能力(即让我们的思维更加开阔,如果后期我们要去设计咱们的软件的话,那么就能套用这些设计模式去设计咱们的软件了)、编程能力和设计能力。当然,在这里我们更强调的是设计能力
- 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期
- 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强
以上说的这些优点,字面意思都看得懂,但问题是现在体现不出来,因为我们还没有学习到这些设计模式。等我们学完了设计模式之后,大家不妨再来深刻地体会一下这些好处。
设计模式的分类
通过前面的学习,我们知道设计模式有23种,而且想必大家也知道了这23种设计模式又可分成三大类,即:
- 创建型模式
- 结构型模式
- 行为型模式
那么接下来,我再来为大家一个一个地详细介绍下这些分类。
创建型模式
什么是创建型模式呢?大家看下面这句话便能知道答案了。
用于描述"怎样创建对象",它的主要特点是"将对象的创建与使用分离"。
看到这儿的话,有些同学可能会想,创建对象这个谁不会啊!不就是new一个对象嘛!比如说现在有一个Student类,那么要创建对象的话,new一个Student不就行了嘛,这样对象就创建好了。
不错,这说的没有任何问题,但是我们现在讨论的是创建型模式啊!而它最主要的特点就是将对象的创建和使用分离。可按照我们之前的做法,更多的是创建好对象之后,就开始使用这个对象了,那么从某种意义上来说,创建型模式其实就是进行了一个解耦。
最后,我们再看一下GoF四人组,他们的书中都提供了哪些创建型模式,我也不废话,直接就列出来了,如下所示,提供了5种创建型模式。
- 单例模式
- 原型模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
结构型模式
什么是结构型模式呢?大家看下面这句话便能知道答案了。
结构型模式用于描述如何将类和对象按照某种布局组成更大的结构。
这句话,怎么去理解呢?我来举个例子吧!比如说,你现在要盖房,那么创建型模式就好比你去购买盖房所需要的材料,如钢筋、水泥等等,然后用这些材料你就能搭起来整个房屋的架构了,这个就是所谓的结构型模式。
那么GoF四人组他们在自己的书中提供了哪些结构型模式呢?大家也不用翻书了,我直接列出来了,如下所示,提供了7种结构型模式:
- 代理模式
- 适配器模式
- 桥接模式
- 装饰者模式
- 外观模式
- 享元模式
- 组合模式
行为型模式
什么是行为型模式呢?大家看下面这句话便能知道答案了。
用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。
这句话要理解清楚也非常简单,就是多个对象合作去完成某一件事。
那么GoF四人组他们在自己的书中提供了哪些行为型模式呢?大家也不用翻书了,我直接列出来了,如下所示,提供了11种结构型模式:
- 模板方法模式
- 策略模式
- 命令模式
- 责任链模式
- 状态模式
- 观察者模式
- 中介者模式
- 迭代器模式
- 访问者模式
- 备忘录模式
- 解释器模式
以上是关于从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述的主要内容,如果未能解决你的问题,请参考以下文章
从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述