Table of Contents
1. Introduction 1.1
2. 基础知识 1.2
1. 设计模式概述 1.2.1
1. 从招式与内功谈起——设计模式概述(一) 1.2.1.1
2. 从招式与内功谈起——设计模式概述(二) 1.2.1.2
3. 从招式与内功谈起——设计模式概述(三) 1.2.1.3
2. 面向对象设计原则 1.2.2
3. 六个创建型模式 1.3
1. 面向对象设计原则之单一职责原则 1.2.2.1
2. 面向对象设计原则之开闭原则 1.2.2.2
3. 面向对象设计原则之里氏代换原则 1.2.2.3
4. 面向对象设计原则之依赖倒转原则 1.2.2.4
5. 面向对象设计原则之接口隔离原则 1.2.2.5
6. 面向对象设计原则之合成复用原则 1.2.2.6
7. 面向对象设计原则之迪米特法则 1.2.2.7
1. 简单工厂模式-Simple Factory Pattern 1.3.1
1. 工厂三兄弟之简单工厂模式(一) 1.3.1.1
2. 工厂三兄弟之简单工厂模式(二) 1.3.1.2
3. 工厂三兄弟之简单工厂模式(三) 1.3.1.3
4. 工厂三兄弟之简单工厂模式(四) 1.3.1.4
2. 工厂方法模式-Factory Method Pattern 1.3.2
1. 工厂三兄弟之工厂方法模式(一) 1.3.2.1
2. 工厂三兄弟之工厂方法模式(二) 1.3.2.2
3. 工厂三兄弟之工厂方法模式(三) 1.3.2.3
4. 工厂三兄弟之工厂方法模式(四) 1.3.2.4
3. 抽象工厂模式-Abstract Factory Pattern 1.3.3
1. 工厂三兄弟之抽象工厂模式(一) 1.3.3.1
2. 工厂三兄弟之抽象工厂模式(二) 1.3.3.2
3. 工厂三兄弟之抽象工厂模式(三) 1.3.3.3
4. 工厂三兄弟之抽象工厂模式(四) 1.3.3.4
5. 工厂三兄弟之抽象工厂模式(五) 1.3.3.5
4. 单例模式-Singleton Pattern 1.3.4
1. 确保对象的唯一性——单例模式 (一) 1.3.4.1
2. 确保对象的唯一性——单例模式 (二) 1.3.4.2
3. 确保对象的唯一性——单例模式 (三) 1.3.4.3
4. 确保对象的唯一性——单例模式 (四) 1.3.4.4
5. 确保对象的唯一性——单例模式 (五) 1.3.4.5
5. 原型模式-Prototype Pattern 1.3.5
1. 对象的克隆——原型模式(一) 1.3.5.1
2. 对象的克隆——原型模式(二) 1.3.5.2
3. 对象的克隆——原型模式(三) 1.3.5.3
4. 对象的克隆——原型模式(四) 1.3.5.4
6. 建造者模式-Builder Pattern 1.3.6
1. 复杂对象的组装与创建——建造者模式(一) 1.3.6.1
2. 复杂对象的组装与创建——建造者模式(二) 1.3.6.2
3. 复杂对象的组装与创建——建造者模式(三) 1.3.6.3
4. 七个结构型模式 1.4
1. 适配器模式-Adapter Pattern 1.4.1
1. 不兼容结构的协调——适配器模式(一) 1.4.1.1
1
2. 不兼容结构的协调——适配器模式(二) 1.4.1.2
3. 不兼容结构的协调——适配器模式(三) 1.4.1.3
4. 不兼容结构的协调——适配器模式(四) 1.4.1.4
2. 桥接模式-Bridge Pattern 1.4.2
1. 处理多维度变化——桥接模式(一) 1.4.2.1
2. 处理多维度变化——桥接模式(二) 1.4.2.2
3. 处理多维度变化——桥接模式(三) 1.4.2.3
4. 处理多维度变化——桥接模式(四) 1.4.2.4
3. 组合模式-Composite Pattern 1.4.3
1. 树形结构的处理——组合模式(一) 1.4.3.1
2. 树形结构的处理——组合模式(二) 1.4.3.2
3. 树形结构的处理——组合模式(三) 1.4.3.3
4. 树形结构的处理——组合模式(四) 1.4.3.4
5. 树形结构的处理——组合模式(五) 1.4.3.5
4. 装饰模式-Decorator Pattern 1.4.4
1. 扩展系统功能——装饰模式(一) 1.4.4.1
2. 扩展系统功能——装饰模式(二) 1.4.4.2
3. 扩展系统功能——装饰模式(三) 1.4.4.3
4. 扩展系统功能——装饰模式(四) 1.4.4.4
5. 外观模式-Facade Pattern 1.4.5
1. 深入浅出外观模式(一) 1.4.5.1
2. 深入浅出外观模式(二) 1.4.5.2
3. 深入浅出外观模式(三) 1.4.5.3
6. 享元模式-Flyweight Pattern 1.4.6
1. 实现对象的复用——享元模式(一) 1.4.6.1
2. 实现对象的复用——享元模式(二) 1.4.6.2
3. 实现对象的复用——享元模式(三) 1.4.6.3
4. 实现对象的复用——享元模式(四) 1.4.6.4
5. 实现对象的复用——享元模式(五) 1.4.6.5
7. 代理模式-Proxy Pattern 1.4.7
1. 设计模式之代理模式(一) 1.4.7.1
2. 设计模式之代理模式(二) 1.4.7.2
3. 设计模式之代理模式(三) 1.4.7.3
4. 设计模式之代理模式(四) 1.4.7.4
5. 十一个行为型模式 1.5
1. 职责链模式-Chain of Responsibility Pattern 1.5.1
1. 请求的链式处理——职责链模式(一) 1.5.1.1
2. 请求的链式处理——职责链模式(二) 1.5.1.2
3. 请求的链式处理——职责链模式(三) 1.5.1.3
4. 请求的链式处理——职责链模式(四) 1.5.1.4
2. 命令模式-Command Pattern 1.5.2
1. 请求发送者与接收者解耦——命令模式(一) 1.5.2.1
2. 请求发送者与接收者解耦——命令模式(二) 1.5.2.2
3. 请求发送者与接收者解耦——命令模式(三) 1.5.2.3
4. 请求发送者与接收者解耦——命令模式(四) 1.5.2.4
5. 请求发送者与接收者解耦——命令模式(五) 1.5.2.5
6. 请求发送者与接收者解耦——命令模式(六) 1.5.2.6
3. 解释器模式-Interpreter Pattern 1.5.3
1. 自定义语言的实现——解释器模式(一) 1.5.3.1
2. 自定义语言的实现——解释器模式(二) 1.5.3.2
3. 自定义语言的实现——解释器模式(三) 1.5.3.3
4. 自定义语言的实现——解释器模式(四) 1.5.3.4
5. 自定义语言的实现——解释器模式(五) 1.5.3.5
2
6. 自定义语言的实现——解释器模式(六) 1.5.3.6
4. 迭代器模式-Iterator Pattern 1.5.4
1. 遍历聚合对象中的元素——迭代器模式(一) 1.5.4.1
2. 遍历聚合对象中的元素——迭代器模式(二) 1.5.4.2
3. 遍历聚合对象中的元素——迭代器模式(三) 1.5.4.3
4. 遍历聚合对象中的元素——迭代器模式(四) 1.5.4.4
5. 遍历聚合对象中的元素——迭代器模式(五) 1.5.4.5
6. 遍历聚合对象中的元素——迭代器模式(六) 1.5.4.6
5. 中介者模式-Mediator Pattern 1.5.5
1. 协调多个对象之间的交互——中介者模式(一) 1.5.5.1
2. 协调多个对象之间的交互——中介者模式(二) 1.5.5.2
3. 协调多个对象之间的交互——中介者模式(三) 1.5.5.3
4. 协调多个对象之间的交互——中介者模式(四) 1.5.5.4
5. 协调多个对象之间的交互——中介者模式(五) 1.5.5.5
6. 备忘录模式-Memento Pattern 1.5.6
1. 撤销功能的实现——备忘录模式(一) 1.5.6.1
2. 撤销功能的实现——备忘录模式(二) 1.5.6.2
3. 撤销功能的实现——备忘录模式(三) 1.5.6.3
4. 撤销功能的实现——备忘录模式(四) 1.5.6.4
5. 撤销功能的实现——备忘录模式(五) 1.5.6.5
7. 观察者模式-Observer Pattern 1.5.7
1. 对象间的联动——观察者模式(一) 1.5.7.1
2. 对象间的联动——观察者模式(二) 1.5.7.2
3. 对象间的联动——观察者模式(三) 1.5.7.3
4. 对象间的联动——观察者模式(四) 1.5.7.4
5. 对象间的联动——观察者模式(五) 1.5.7.5
6. 对象间的联动——观察者模式(六) 1.5.7.6
8. 状态模式-State Pattern 1.5.8
6. 设计模式趣味学习(复习) 1.6
1. 设计模式与足球(一) 1.6.1
2. 设计模式与足球(二) 1.6.2
3. 设计模式与足球(三) 1.6.3
4. 设计模式与足球(四) 1.6.4
3
1. 处理对象的多种状态及其相互转换——状态模式(一) 1.5.8.1
2. 处理对象的多种状态及其相互转换——状态模式(二) 1.5.8.2
3. 处理对象的多种状态及其相互转换——状态模式(三) 1.5.8.3
4. 处理对象的多种状态及其相互转换——状态模式(四) 1.5.8.4
5. 处理对象的多种状态及其相互转换——状态模式(五) 1.5.8.5
6. 处理对象的多种状态及其相互转换——状态模式(六) 1.5.8.6
9. 策略模式-Strategy Pattern 1.5.9
1. 算法的封装与切换——策略模式(一) 1.5.9.1
2. 算法的封装与切换——策略模式(二) 1.5.9.2
3. 算法的封装与切换——策略模式(三) 1.5.9.3
4. 算法的封装与切换——策略模式(四) 1.5.9.4
10. 模板方法模式-Template Method Pattern 1.5.10
1. 模板方法模式深度解析(一) 1.5.10.1
2. 模板方法模式深度解析(二) 1.5.10.2
3. 模板方法模式深度解析(三) 1.5.10.3
11. 访问者模式-Visitor Pattern 1.5.11
1. 操作复杂对象结构——访问者模式(一) 1.5.11.1
2. 操作复杂对象结构——访问者模式(二) 1.5.11.2
3. 操作复杂对象结构——访问者模式(三) 1.5.11.3
4. 操作复杂对象结构——访问者模式(四) 1.5.11.4
1. 多人联机射击游戏中的设计模式应用(一) 1.7.1.1
2. 多人联机射击游戏中的设计模式应用(二) 1.7.1.2
2. 数据库同步系统 1.7.2
7. 设计模式综合应用实例 1.7
1. 多人联机射击游戏 1.7.1
1. 设计模式综合实例分析之数据库同步系统(一) 1.7.2.1
2. 设计模式综合实例分析之数据库同步系统(二) 1.7.2.2
3. 设计模式综合实例分析之数据库同步系统(三) 1.7.2.3
4
Introduction
Introduction
设计模式
Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对
象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学
习,http://quanke.name 现将所有文章的进行了整理,方便大家下载阅读,希望能给各位带来帮
助!
阅读地址:http://gof.quanke.name/
下载地址:https://www.gitbook.com/book/quanke/design-pattern-java/
源码下载地址:https://github.com/quanke/design-pattern-java-source-code.git
课件下载地址:http://www.chinasa.info/download/DP-Slides.rar
作者:刘伟 http://blog.csdn.net/lovelion
本书编辑:http://quanke.name
刘伟(Sunny),中南大学计算机应用技术博士,国家认证系统分析师(2005年),国家认
证系统架构设计师(2009年,全国第四名),高级程序员,数据库系统工程师,MCSE,
MCDBA,CASI专业顾问与企业内训讲师。具有十多年软件开发、项目管理及教育培训
经验,曾在NIIT(印度国家信息技术学院)担任高级讲师,主持和参与30多个软件项目
的开发工作,并给国内多家公司提供软件开发、软件设计等培训服务,现主要致力于软
件工程、数据挖掘等领域的教学、推广和研究工作。技术专长:软件架构、设计模式、
UML、OOAD、数据挖掘等。已出版设计模式书籍四本:《设计模式》(清华大学出版
社,2011年)、《设计模式实训教程》(清华大学出版社,2012年)、《设计模式的艺
术——软件开发人员内功修炼之道》(清华大学出版社,2013年)、《C#设计模式》
(清华大学出版社,2013年)。架构师之家www.chinasa.info站长。 E-
mail:weiliu_china@126.com 微博地址:http://weibo.com/csusunny
更多干货,请关注:http://quanke.name
5
基础知识
基础知识
基础知识
基础知识
设计模式概述
从招式与内功谈起——设计模式概述(一)
从招式与内功谈起——设计模式概述(二)
从招式与内功谈起——设计模式概述(三)
面向对象设计原则
面向对象设计原则之单一职责原则
面向对象设计原则之开闭原则
面向对象设计原则之里氏代换原则
面向对象设计原则之依赖倒转原则
面向对象设计原则之接口隔离原则
面向对象设计原则之合成复用原则
面向对象设计原则之迪米特法则
6
设计模式概述
设计模式概述
设计模式概述
设计模式概述
从招式与内功谈起——设计模式概述(一)
从招式与内功谈起——设计模式概述(二)
从招式与内功谈起——设计模式概述(三)
7
从招式与内功谈起——设计模式概述(一)
从招式与内功谈起——设计模式概述(一)
从招式与内功谈起——设计模式概述(一)
关于金庸小说中到底是招式重要还是内功重要的争论从未停止,我们在这里并不分析张无忌
的九阳神功和令狐冲的独孤九剑到底哪个更厉害,但我想每个武林人士梦寐以求的应该是既
有淋漓的招式又有深厚的内功。看到这里大家可能会产生疑问了?搞什么,讨论什么招式与
内功,我只是个软件开发人员。别急,正因为你是软件开发人员我才跟你谈这个,因为我们
的软件开发技术也包括一些招式和内功:Java、C#、C++等编程语言,Eclipse、Visual Studio
等开发工具,JSP、ASP.net等开发技术,Struts、Hibernate、JBPM等框架技术,所有这些我们
都可以认为是招式;而数据结构、算法、设计模式、重构、软件工程等则为内功。招式可以
很快学会,但是内功的修炼需要更长的时间。我想每一位软件开发人员也都希望成为一名兼
具淋漓招式和深厚内功的“上乘”软件工程师,而对设计模式的学习与领悟将会让你“内功”大
增,再结合你日益纯熟的“招式”,你的软件开发“功力”一定会达到一个新的境界。既然这样,
还等什么,赶快行动吧。下面就让我们正式踏上神奇而又美妙的设计模式之旅。
1 设计模式从何而来
在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展。与很多软件工程技术一
样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的
建筑工程有太多值得学习和借鉴的地方。
那么模式是如何诞生的?让我们先来认识一个人——Christopher Alexander(克里斯托弗.亚历
山大),哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授、加州大学伯克利分校
环境结构研究所所长、美国艺术和科学院院士……头衔真多,微笑,不过他还有一个“昵
称”——模式之父(The father of patterns)。Christopher Alexander博士及其研究团队用了约20年的
时间,对住宅和周边环境进行了大量的调查研究和资料收集工作,发现人们对舒适住宅和城
市环境存在一些共同的认同规律,Christopher Alexander在著作A Pattern Language: Towns,
Buildings, Construction中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从
Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行
了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。
在Christopher Alexander的另一部经典著作《建筑的永恒之道》中,他给出了关于模式的定
义:
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核
心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的
工作。这个定义可以简单地用一句话表示:
8