设计模式的艺术:软件开发人员内功修炼之道.刘伟(带详细书签).pdf
软件开发是一门技术,更是一门艺术。设计模式是面向对象软件开发的入门功夫,是前人经验的积累,它为构建可维护性和可复用性俱佳的软件而诞生。本书结合大量应用实例分析和讲解每一个设计模式,力求通过最通俗易懂的方式让读者学习和理解设计模式,并且在真实项目实例的引导下学会选择和合理运用设计模式。 本书分为4个部分,共26章内容: 第1部分(第1章、第2章)为基础知识,包括设计模式概述、UML类图与面向对象设计原则等; 第2部分(第3~8章)为创建的艺术,包括6种常用的创建型设计模式; 第3部分(第9~15章)为组合的艺术,包括7种常用的结构型设计模式; 第4部分(第16~26章)为交互的艺术,包括11种常用的行为型设计模式。 本书可作为一线软件开发人员、高等院校计算机及 软件等相关专业师生、IT培训机构讲师和学员、业余软件开发人员、设计模式研究人员以及爱好者的参考用书和自学读物。 第1部分 基础知识 第1章 从招式与内功谈起——设计模式概述 1.1 设计模式从何而来 1.2 设计模式是什么 1.3 设计模式有什么用 1.4 个人观点 1.5 知识回顾 第2章 预备知识——UML类图与面向对象设计原则 2.1 UML概述 2.2 类与类的UML图示 2.3 类之间的关系 2.4 面向对象设计原则概述 2.5 单一职责原则 2.6 开闭原则 2.7 里氏代换原则 2.8 依赖倒转原则 2.9 接口隔离原则 2.10 合成复用原则 2.11 迪米特法则 2.12 知识回顾 第2部分 创建的艺术——创建型模式 第3章 确保对象的唯一性——单例模式 3.1 单例模式的动机 3.2 单例模式概述 3.3 负载均衡器的设计 3.4 饿汉式单例与懒汉式单例的讨论 3.5 一种更好的单例实现方法 3.6 单例模式总结 3.7 知识回顾 第4章 集中式工厂的实现——简单工厂模式 4.1 图表库的设计 4.2 简单工厂模式概述 4.3 完整解决方案 4.4 方案的改进 4.5 创建对象与使用对象 4.6 简单工厂模式的简化 4.7 简单工厂模式总结 4.8 知识回顾 第5章 多态工厂的实现——工厂方法模式 5.1 日志记录器的设计 5.2 工厂方法模式概述 5.3 完整解决方案 5.4 反射与配置文件 5.5 重载的工厂方法 5.6 工厂方法的隐藏 5.7 工厂方法模式总结 5.8 知识回顾 第6章 产品族的创建——抽象工厂模式 6.1 界面皮肤库的初始设计 6.2 产品等级结构与产品族 6.3 抽象工厂模式概述 6.4 完整解决方案 6.5 开闭原则的倾斜性 6.6 抽象工厂模式总结 6.7 知识回顾 第7章 对象的克隆——原型模式 7.1 大同小异的工作周报 7.2 原型模式概述 7.3 完整解决方案 7.4 带附件的周报 7.5 原型管理器的引入和实现 7.6 原型模式总结 7.7 知识回顾 第8章 复杂对象的组装与创建——建造者模式 8.1 游戏角色设计 8.2 建造者模式概述 8.3 完整解决方案 8.4 关于Director的进一步讨论 8.5 建造者模式总结 8.6 知识回顾 第3部分 组合的艺术——结构型模式 第9章 不兼容结构的协调——适配器模式 9.1 没有源码的算法库 9.2 适配器模式概述 9.3 完整解决方案 9.4 类适配器模式 9.5 双向适配器模式 9.6 缺省适配器模式 9.7 适配器模式总结 9.8 知识回顾 第10章 处理多维度变化——桥接模式 10.1 跨平台图像浏览系统 10.2 桥接模式概述 10.3 完整解决方案 10.4 适配器模式与桥接模式的联用 10.5 桥接模式总结 10.6 知识回顾 第11章 树形结构的处理——组合模式 11.1 设计杀毒软件的框架结构 11.2 组合模式概述 11.3 完整解决方案 11.4 透明组合模式与安全组合模式 11.5 Sunny公司组织结构 11.6 组合模式总结 11.7 知识回顾 第12章 扩展系统功能——装饰模式 12.1 图形界面构件库的设计 12.2 装饰模式概述 12.3 完整解决方案 12.4 透明装饰模式与半透明装饰模式 12.5 装饰模式注意事项 12.6 装饰模式总结 12.7 知识回顾 第13章 提供统一入口——外观模式 13.1 文件加密模块的设计 13.2 外观模式概述 13.3 完整解决方案 13.4 抽象外观类的引入 13.5 外观角色设计补充说明 13.6 外观模式总结 13.7 知识回顾 第14章 实现对象的复用——享元模式 14.1 围棋棋子的设计 14.2 享元模式概述 14.3 完整解决方案 14.4 带外部状态的解决方案 14.5 单纯享元模式和复合享元模式 14.6 关于享元模式的几点补充 14.7 享元模式总结 14.8 知识回顾 第15章 对象的间接访问——代理模式 15.1 收费商务信息查询系统的设计 15.2 代理模式概述 15.3 完整解决方案 15.4 远程代理 15.5 虚拟代理 15.6 Java动态代理 15.7 代理模式总结 15.8 知识回顾 第4部分 交互的艺术——行为型模式 第16章 请求的链式处理——职责链模式 16.1 采购单的分级审批 16.2 职责链模式概述 16.3 完整解决方案 16.4 纯与不纯的职责链模式 16.5 职责链模式总结 16.6 知识回顾 第17章 请求发送者与接收者解耦——命令模式 17.1 自定义功能键 17.2 命令模式概述 17.3 完整解决方案 17.4 命令队列的实现 17.5 撤销操作的实现 17.6 请求日志 17.7 宏命令 17.8 命令模式总结 17.9 知识回顾 第18章 自定义语言的实现——解释器模式 18.1 机器人控制程序 18.2 文法规则和抽象语法树 18.3 解释器模式概述 18.4 完整解决方案 18.5 再谈Context的作用 18.6 解释器模式总结 18.7 知识回顾 第19章 遍历聚合对象中的元素——迭代器模式 19.1 销售管理系统中数据的遍历 19.2 迭代器模式概述 19.3 完整解决方案 19.4 使用内部类实现迭代器 19.5 JDK内置迭代器 19.6 迭代器模式总结 19.7 知识回顾 第20章 协调多个对象之间的交互——中介者模式 20.1 客户信息管理窗口的初始设计 20.2 中介者模式概述 20.3 完整解决方案 20.4 中介者与同事类的扩展 20.5 中介者模式总结 20.6 知识回顾 第21章 撤销功能的实现——备忘录模式 21.1 可悔棋的中国象棋 21.2 备忘录模式概述 21.3 完整解决方案 21.4 实现多次撤销 21.5 再谈备忘录的封装 21.6 备忘录模式总结 21.7 知识回顾 第22章 对象间的联动——观察者模式 22.1 多人联机对战游戏的设计 22.2 观察者模式概述 22.3 完整解决方案 22.4 JDK对观察者模式的支持 22.5 观察者模式与Java事件处理 22.6 观察者模式与MVC 22.7 观察者模式总结 22.8 知识回顾 第23章 对象状态及其转换——状态模式 23.1 银行系统中的账户类设计 23.2 状态模式概述 23.3 完整解决方案 23.4 共享状态 23.5 使用环境类实现状态转换 23.6 状态模式总结 23.7 知识回顾 第24章 算法的封装与切换——策略模式 24.1 电影票打折方案 24.2 策略模式概述 24.3 完整解决方案 24.4 策略模式的两个典型应用 24.5 策略模式总结 24.6 知识回顾 第25章 定义算法的框架——模板方法模式 25.1 银行利息计算模块 25.2 模板方法模式概述 25.3 完整解决方案 25.4 钩子方法的使用 25.5 模板方法模式总结 25.6 知识回顾 第26章 操作复杂对象结构——访问者模式 26.1 OA系统中员工数据汇总 26.2 访问者模式概述 26.3 完整解决方案 26.4 访问者模式与组合模式联用 26.5 访问者模式总结 26.6 知识回顾 参考文献 软件等相关专业师生、IT培训机构讲师和学员、业余软件开发人员、设计模式研究人员以及爱好者的参考用书和自学读物。 第1部分 基础知识 第1章 从招式与内功谈起——设计模式概述 1.1 设计模式从何而来 1.2 设计模式是什么 1.3 设计模式有什么用 1.4 个人观点 1.5 知识回顾 第2章 预备知识——UML类图与面向对象设计原则 2.1 UML概述 2.2 类与类的UML图示 2.3 类之间的关系 2.4 面向对象设计原则概述 2.5 单一职责原则 2.6 开闭原则 2.7 里氏代换原则 2.8 依赖倒转原则 2.9 接口隔离原则 2.10 合成复用原则 2.11 迪米特法则 2.12 知识回顾 第2部分 创建的艺术——创建型模式 第3章 确保对象的唯一性——单例模式 3.1 单例模式的动机 3.2 单例模式概述 3.3 负载均衡器的设计 3.4 饿汉式单例与懒汉式单例的讨论 3.5 一种更好的单例实现方法 3.6 单例模式总结 3.7 知识回顾 第4章 集中式工厂的实现——简单工厂模式 4.1 图表库的设计 4.2 简单工厂模式概述 4.3 完整解决方案 4.4 方案的改进 4.5 创建对象与使用对象 4.6 简单工厂模式的简化 4.7 简单工厂模式总结 4.8 知识回顾 第5章 多态工厂的实现——工厂方法模式 5.1 日志记录器的设计 5.2 工厂方法模式概述 5.3 完整解决方案 5.4 反射与配置文件 5.5 重载的工厂方法 5.6 工厂方法的隐藏 5.7 工厂方法模式总结 5.8 知识回顾 第6章 产品族的创建——抽象工厂模式 6.1 界面皮肤库的初始设计 6.2 产品等级结构与产品族 6.3 抽象工厂模式概述 6.4 完整解决方案 6.5 开闭原则的倾斜性 6.6 抽象工厂模式总结 6.7 知识回顾 第7章 对象的克隆——原型模式 7.1 大同小异的工作周报 7.2 原型模式概述 7.3 完整解决方案 7.4 带附件的周报 7.5 原型管理器的引入和实现 7.6 原型模式总结 7.7 知识回顾 第8章 复杂对象的组装与创建——建造者模式 8.1 游戏角色设计 8.2 建造者模式概述 8.3 完整解决方案 8.4 关于Director的进一步讨论 8.5 建造者模式总结 8.6 知识回顾 第3部分 组合的艺术——结构型模式 第9章 不兼容结构的协调——适配器模式 9.1 没有源码的算法库 9.2 适配器模式概述 9.3 完整解决方案 9.4 类适配器模式 9.5 双向适配器模式 9.6 缺省适配器模式 9.7 适配器模式总结 9.8 知识回顾 第10章 处理多维度变化——桥接模式 10.1 跨平台图像浏览系统 10.2 桥接模式概述 10.3 完整解决方案 10.4 适配器模式与桥接模式的联用 10.5 桥接模式总结 10.6 知识回顾 第11章 树形结构的处理——组合模式 11.1 设计杀毒软件的框架结构 11.2 组合模式概述 11.3 完整解决方案 11.4 透明组合模式与安全组合模式 11.5 Sunny公司组织结构 11.6 组合模式总结 11.7 知识回顾 第12章 扩展系统功能——装饰模式 12.1 图形界面构件库的设计 12.2 装饰模式概述 12.3 完整解决方案 12.4 透明装饰模式与半透明装饰模式 12.5 装饰模式注意事项 12.6 装饰模式总结 12.7 知识回顾 第13章 提供统一入口——外观模式 13.1 文件加密模块的设计 13.2 外观模式概述 13.3 完整解决方案 13.4 抽象外观类的引入 13.5 外观角色设计补充说明 13.6 外观模式总结 13.7 知识回顾 第14章 实现对象的复用——享元模式 14.1 围棋棋子的设计 14.2 享元模式概述 14.3 完整解决方案 14.4 带外部状态的解决方案 14.5 单纯享元模式和复合享元模式 14.6 关于享元模式的几点补充 14.7 享元模式总结 14.8 知识回顾 第15章 对象的间接访问——代理模式 15.1 收费商务信息查询系统的设计 15.2 代理模式概述 15.3 完整解决方案 15.4 远程代理 15.5 虚拟代理 15.6 Java动态代理 15.7 代理模式总结 15.8 知识回顾 第4部分 交互的艺术——行为型模式 第16章 请求的链式处理——职责链模式 16.1 采购单的分级审批 16.2 职责链模式概述 16.3 完整解决方案 16.4 纯与不纯的职责链模式 16.5 职责链模式总结 16.6 知识回顾 第17章 请求发送者与接收者解耦——命令模式 17.1 自定义功能键 17.2 命令模式概述 17.3 完整解决方案 17.4 命令队列的实现 17.5 撤销操作的实现 17.6 请求日志 17.7 宏命令 17.8 命令模式总结 17.9 知识回顾 第18章 自定义语言的实现——解释器模式 18.1 机器人控制程序 18.2 文法规则和抽象语法树 18.3 解释器模式概述 18.4 完整解决方案 18.5 再谈Context的作用 18.6 解释器模式总结 18.7 知识回顾 第19章 遍历聚合对象中的元素——迭代器模式 19.1 销售管理系统中数据的遍历 19.2 迭代器模式概述 19.3 完整解决方案 19.4 使用内部类实现迭代器 19.5 JDK内置迭代器 19.6 迭代器模式总结 19.7 知识回顾 第20章 协调多个对象之间的交互——中介者模式 20.1 客户信息管理窗口的初始设计 20.2 中介者模式概述 20.3 完整解决方案 20.4 中介者与同事类的扩展 20.5 中介者模式总结 20.6 知识回顾 第21章 撤销功能的实现——备忘录模式 21.1 可悔棋的中国象棋 21.2 备忘录模式概述 21.3 完整解决方案 21.4 实现多次撤销 21.5 再谈备忘录的封装 21.6 备忘录模式总结 21.7 知识回顾 第22章 对象间的联动——观察者模式 22.1 多人联机对战游戏的设计 22.2 观察者模式概述 22.3 完整解决方案 22.4 JDK对观察者模式的支持 22.5 观察者模式与Java事件处理 22.6 观察者模式与MVC 22.7 观察者模式总结 22.8 知识回顾 第23章 对象状态及其转换——状态模式 23.1 银行系统中的账户类设计 23.2 状态模式概述 23.3 完整解决方案 23.4 共享状态 23.5 使用环境类实现状态转换 23.6 状态模式总结 23.7 知识回顾 第24章 算法的封装与切换——策略模式 24.1 电影票打折方案 24.2 策略模式概述 24.3 完整解决方案 24.4 策略模式的两个典型应用 24.5 策略模式总结 24.6 知识回顾 第25章 定义算法的框架——模板方法模式 25.1 银行利息计算模块 25.2 模板方法模式概述 25.3 完整解决方案 25.4 钩子方法的使用 25.5 模板方法模式总结 25.6 知识回顾 第26章 操作复杂对象结构——访问者模式 26.1 OA系统中员工数据汇总 26.2 访问者模式概述 26.3 完整解决方案 26.4 访问者模式与组合模式联用 26.5 访问者模式总结 26.6 知识回顾 参考文献