1.0 引子
回想学习设计模式的风风雨雨,真是感慨万千。记得大约在广州的一家公司,在抽烟中(建议少抽烟),我和一个技术大牛聊起了软件质量这块,我立即被他的博学多才深深震撼了。这个技术大牛会用生活中的例子和我聊设计模式,通俗易懂,而且很难忘记,我当时就想,如果我也能成为像他这样的大牛该多好。为了心中的理想(成为架构师),我决定发奋图强,秉灯夜烛。经过无数次痛苦并快乐的学习和实践,我终于成长为领导和同事眼中的技术大牛(汗),并幸运地被一家国内知名企业聘为架构师。为了初学者少走弯路,为了中国软件质量(汗),我决定牺牲自己的业余时间撰写博客和录制视频,和大家一起探讨设计模式。特别推荐【研磨设计模式】这本书,我的博客和视频基本上都是以这本书为参考模型。1.1 设计模式简介
1.1.1 概念
在软件开发中,经过验证的,用于解决特定环境下、重复出现的、特定问题的解决方案。
下面分别详细描述每个限定词。
在软件开发中:特指后面讨论的设计模式仅限于软件开发领域。其他领域(如建筑行业)的设计模式不在本教程讨论范围内。
经过验证的:是指经过大家认可和公认的,不是某个人的奇思妙想。
特定环境:是指特定的应用上下文环境,脱离这个环境,这个设计模式有可能不成立或者适得其反。
重复出现:只有针对重复出现的问题提出的解决方案才具有更大的应用价值,当再次遇到类似问题,只要复用即可,避免重复发明轮子。
特定问题:说明设计模式不是包治百病的灵丹妙药,不要滥用和误用设计模式。
解决方案:解决问题的方法。
1.1.2 扩展理解
- 深入理解设计模式内在的思想,不要生搬硬套。
- 设计模式不是一成不变的,而是在不断发展中,本教程暂介绍常用的23种设计模式。期待更多更优秀的设计模式加入。
- 设计模式不是软件领域特有的,其他各行各业都有相关的设计模式。
1.1.3 起源
设计模式最初是由建筑行业的一个名叫Alexander的建筑师发现的。大约在1995年出版的《设计模式—可复用面向对象的基础》从此掀开了软件领域设计模式的序幕。而此书的4位作者被后人称为“四人帮”,也就是大名鼎鼎的GOF(Gang of Four)。
1.2 设计模式组成
1.2.1 基本组成
针对单个设计模式,本教程采用如下范式来描述。
模式名称 + 应用场景 + 解决方法 + 注意事项
1.2.2 分类
- 创建型:如何创建对象。
- 结构型:组合对象以获取更大对象。
- 行为型:对象职责划分。
1.3 设计模式学习
1.3.1 意义
- 软件开发人员交流的“标准词汇”。
- 提高个人设计和开发的能力。
- 提高开发效率。
- 提高产品质量,降低后期维护成本。
1.3.2阶段划分
初级:了解设计模式的基本知识,能够在实际项目开发中套用。
中级:可以对设计模式变形使用。
高级:深入理解设计模式,在实际项目开发中综合运用各种设计模式。
1.3.3 如何学习
- 准确理解每个设计模式的功能、结构,标准实现、应用场景以及注意事项。
- 在实际项目开发中,大胆尝试运用设计模式,并不断总结经验。
- 继续理论学习,并用理论来分析实际项目中运用到的设计模式。
- 如此不断重复理论和实践的过程,成为高手中的高手,简称高高手。
1.4 本课程注意事项
开发工具:vs2015
开发语言:C++
UML工具:PowerDesigner
设计模式重在思想,和某种语言关系不大,但为了讲课的效率,采用了c++,因为本人最熟悉的语言就是c++。如果有其他观众需要,我会录制其他语言的视频,比如java、c#等等。
您的支持就是我最大的动力,后续,我会继续录制重构、duilib库、QT等视频,欢迎大家拍砖。