1,概念:在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案
2,(语句分析法) 模:模型,模板,式:方法/方式
3,理解
- 设计模式式解决某些问题的方法。
- 设计模式不是凭空想出来的,是经验的积累和总结
- 设计模式并不是一成不变的,而是在不断发展中
- 设计模式并不是软件行业独有的,各行各业都有自己的设计模式
比如:医药行业,假设一个人感冒了,到药店–买感冒药
经过验证的:药品上市前,经过大量验证
特定环境的:针对人,而不是动物
重复出现的:感冒重复出现
特定问题:感冒药用来解决感冒,不能治疗脚痛
解决方案: 药品本身就是解决方案的具体体现
4,历史
起源于建筑行业,一位名为Alexander的建筑师,发现并总结一些建筑行业的设计模式。
1995年,四位作者,《设计模式–可复用面向对象软件的基础》,四人组。GoF(Gang of Four)
5,设计模式的组成
在描述一个设计模式的时候,通常会有以下问题 - 模式名称:每个设计模式有一个名字,好记忆,好交流
- 环境和问题:描述在什么环境,出翔什么样的特定问题
- 解决方案:描述如何解决这个问题
- 效果:描述模式应用的效果,以及可能带来的问题,或者使用中权衡的问题
Java领域,按照设计模式所在的技术领域划分:
a,JEE设计模式:(J2EE核心设计模式)一书中提到的设计模式
b,GoF提到的设计模式
c,其他领域,包括不限于:EJB设计模式,实时系统设计模式,多线程设计模式,架构模式等
6,设计模式分类 - 创建型模式:抽象了对象实例化过程,用来帮助创建对象的实例
- 结构型模式:描述如何组合类和对象以获得更大的结构
- 行为型模式:描述算法和对象间职责的分配
7,设计模式和面向对象设计原则
面向对象设计原则有很多原则,大都是是思想原则,指出面向对象分析设计的正确方向
设计模式:针对某个场景下某些特定问题的某个解决方案。也就是说设计原则是思想上的指导,而设计模式是实现的手段,设计模式就是设计原则的一些具体实现。
为什么不重点讲述面向对象设计原则?
- 设计原则从思想层面进行指导,本身是高度概括和原则性的,
- 每一种设计模式并不是单一的体现某一个设计原则,很多设计模式融合了很多个设计原则的思想,并不好强调设计模式对某个或某些设计原则的体现
- 这些原则只是一个建议的指导,“设计是一种危险的平衡艺术”,设计原则只是一个指导,有些时候综合考虑业务功能,实现的难度,系统性能,时间与空间等很多方面。
- 设计模式本身已经很复杂
8,设计模式和UML
UML:是一种标准(大家都懂的)的图形化(简单直观)建模(构建模型)语言(交流),他是面向对象分析与设计的一种标准的表示。
设计模式与UML本身没有任何关系。
可以使用UML来图形化表示设计模式:设计结构,调用顺序等,方便交流。
完全可以不适用UML,可以使用任何方式表示设计模式。。
9,设计模式和设计工具
设计模式重在设计,重在思想,重在解决方案,跟使用什么样的设计工具没有任何联系。
使用设计工具能够有效帮助我们去表达应用设计模式设计出来的成果。
10,设计模式与重构
—,设计模式是重构的目标(重构到什么样,跟着什么走),重构是达到目标的手段之一。
—,重构 并不排斥提前设计,重构并不是不需要设计
—,合理的提前设计+重构来不断的改进设计===》》》趋近于优秀的系统
主要手段:合理的提前设计
辅助手段:重构
11,为什么要学习设计模式
- 软件开发越来越复杂,对软件设计的要求也越来越高,而软件设计和架构入门功夫就是深入理解和掌握设计模式
- 设计模式已经成为软件开发人员的标准词汇
- 学习设计模式是个人提高的捷径。(很多前辈提供的典型问题的优秀解决方案,个人素质的快速提高)
- 不用重复发明轮子(不用自己想办法去处理某些问题,节省开发时间)
12,学习设计模式的层次
–1,基本入门级
要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么环境下,出现什么样的问题,采用何种方案解决,并能够在实际程序设计和开发中套用相关的设计模式
–2,基本掌握级
除了–1之外,还要求能够结合实际应用的场景,对设计模式进行变形使用
前提是能够准确深入理解和把握设计模式的本质,
–3,深入理解和掌握级
除了基本掌握级,更主要是从思想上和方法上吸收设计模式的精髓,并融入到自己的思路上,在进行软件分析设计的时候,能够随意的自然而然地运用
在实际开发中,经常综合应用很多设计模式,去解决实际地问题
更复杂地除了考虑这些是寂寞时,还可能需要考虑系统整体地体系结构,实际地实现,与已有的功能结合。
设计模式的精髓吸收了是从方法和思想方面去理解和掌握设计模式。要达到这种境界,没有足够的开发,设计经验,没有足够的深入思考,是不可能的。(群众与专业人士的区别:具有专业性)
13,如何学习设计模式
—1,首先要调整心态,不要浮躁,不要指望一蹴而就,
需要一个过程,不同的阶段看这些设计模式会有不同的领悟和感受,不要指望真正的设计模式课程又简单又有趣,一看就懂,
要想真正的理解和掌握,必须要上升到一定的难度和深度,让你学完后思考,思考后应用,然后再学,在思考,再应用
—2,第一步,准确理解每个设计模式的功能,基本结构,标准实现,了解适合使用它的场景以及使用的效果
—3,第二步,在实际开发中要尝试使用这些设计模式,并反复思考和总结是否使用妥当,是否需要做些变化
—4,第三步:再回头看设计模式理论,有了实际的模式应用经验再看,会有不同的感悟,一边看一般结合应用经验来思考,比如设计模式的本质功能是什么?它是如何实现的?这种实现方式还可以在什么地方可以应用上?如何才能把设计模式和具体的应用结合上?这个设计模式设计的出发点是什么?等等,
—5,第四步:多次重复第二步,第三步,也就是实际开发中使用,然后结合理论思考,然后再应用,再思考。。如此循环反复多次,直到对设计模式基本掌握水平。
总结:理论指导实践,实践反过来加深对理论的理解,如此反复循环,
14,每个模式的讲述结构 - 初始某个设计模式
包括这个模式的:定义,结构,参考实现。 - 体会某个设计模式
包括:场景问题,不用模式的解决方案,使用模式的解决方案。 - 理解某个设计模式
主要是模式讲解部分,包括:认识某个模式,针对各个重点难点功能,或者与实际应用结合讨论和示例,模式的优缺点。 - 思考某个设计模式
包括模式的本质,对设计原则的体现,何时选用。
15,对每个设计模式进行分级
- 初级内容,基本讲起
- 中高级内容,深入探讨如何理解这些模式,模式中蕴含什么样的设计思想,模式的本质,模式如何结合实际应用,模式的优缺点,和其他模式的关系等