本书以作者自身学习、使用模式和多年来为软件开发人员(包括面向对象技术老兵和新手)讲授模式的经验为基础撰写而成。首先概述了模式的基础知识,以及面向对象分析和设计在当代软件开发中的重要性,随后使用易懂的示例代码阐明了12个最常用的模式,包括它们的基础概念、优点、权衡取舍、实现技术以及需要避免的缺陷,使读者能够理解模式背后的基本原则和动机,理解为什么它们会这样运作。\r\n 本书适合软件开发专业人士,以及计算机专业、软件工程专业的高校师生阅读,也可作为面向对象分析与设计课程的参考教材。\r\n 本书是最简洁、清晰、实用的设计模式著作,应用最新的Java示例,为程序员和架构师提供了使用模式进行设计、开发和交付软件的方法。\r\n 本书以作者多年来为软件开发人员讲授模式的经验为基础撰写而成。其经验已经证明,如果能够理解模式后面的基本原则和动机,理解为什么它们会这样运作,那么将有助于你加速学习模式的进程。\r\n 阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立存在的,多个设计模式协同工作才能创建出更加坚固的应用程序。这里所讲授的12个模式并没有涵盖所有应该学会的模式,但是理解了这12个模式,你将能够举一反三,更加容易地自学其他模式。
第一部分 面向对象软件开发简介\r\n\r\n第1章 面向对象范型 3\r\n1.1 概览 3\r\n1.2 面向对象范型之前:功能分解 3\r\n1.3 需求问题 5\r\n1.4 应对变化:使用功能分解 6\r\n1.5 应对需求变更 8\r\n1.6 面向对象范型 11\r\n1.7 面向对象程序设计实践 16\r\n1.7 特殊对象方法 18\r\n1.8 小结 19\r\n复习题 20\r\n简答题 20\r\n阐述题 21\r\n观点与应用题 21\r\n\r\n第2章 UML 22\r\n2.1 概览 22\r\n2.2 什么是UML 22\r\n2.3 为什么使用UML 23\r\n2.4 类图 23\r\n2.5 交互图 29\r\n2.6 小结 31\r\n复习题 31\r\n简答题 31\r\n阐述题 31\r\n观点与应用题 31\r\n\r\n第二部分 传统面向对象设计的局限\r\n\r\n第3章 对代码灵活性要求很高的问题 35\r\n3.1 概览 35\r\n3.2 提取CAD/CAM系统的信息 35\r\n3.3 了解专业术语 36\r\n3.4 问题描述 37\r\n3.5 挑战及其解决方案 39\r\n3.6 小结 41\r\n复习题 42\r\n简答题 42\r\n阐述题 42\r\n观点与应用题 42\r\n\r\n第4章 标准的面向对象解决方案 43\r\n4.1 概览 43\r\n4.2 作为特例来解决 43\r\n4.3 小结 50\r\n复习题 51\r\n简答题 51\r\n阐述题 51\r\n观点与应用题 51\r\n\r\n第三部分 设计模式\r\n\r\n第5章 设计模式简介 55\r\n5.1 概览 55\r\n5.2 设计模式源自建筑学和人类学 55\r\n5.3 从建筑模式到软件设计模式 59\r\n5.4 为什么学习设计模式 60\r\n5.5 学习设计模式的其他好处 64\r\n5.6 小结 65\r\n复习题 65\r\n简答题 65\r\n阐述题 66\r\n观点与应用题 66\r\n\r\n第6章 Facade模式 67\r\n6.1 概览 67\r\n6.2 Facade模式简介 67\r\n6.3 学习Facade模式 67\r\n6.4 实践注记:Facade模式 70\r\n6.5 Facade模式与CAD/CAM问题的联系 71\r\n6.6 小结 72\r\n复习题 72\r\n简答题 72\r\n阐述题 72\r\n观点与应用题 73\r\n\r\n第7章 Adapter模式 74\r\n7.1 概览 74\r\n7.2 Adapter模式简介 74\r\n7.3 学习Adapter模式 75\r\n7.4 实践注记:Adapter模式 79\r\n7.5 Adapter模式与CAD/CAM问题的联系 82\r\n7.6 小结 82\r\n复习题 82\r\n简答题 82\r\n阐述题 83\r\n观点与应用题 83\r\n\r\n第8章 开拓视野 84\r\n8.1 概览 84\r\n8.2 对象:传统看法与新看法 85\r\n8.3 封装:传统看法与新看法 86\r\n8.4 发现变化并将其封装 89\r\n8.5 共性和可变性分析与抽象类 92\r\n8.6 敏捷编程的品质 94\r\n8.7 小结 97\r\n复习题 98\r\n简答题 98\r\n阐述题 98\r\n观点与应用题 99\r\n\r\n第9章 Strategy模式 100\r\n9.1 概览 100\r\n9.2 处理新需求的一种途径 100\r\n9.3 国际电子商务系统案例研究:最初的需求 102\r\n9.4 处理新的需求 103\r\n9.5 Strategy模式 110\r\n9.6 实践注记:使用Strategy模式 112\r\n9.7 小结 113\r\n复习题 114\r\n简答题 114\r\n阐述题 114\r\n观点与应用题 114\r\n\r\n第10章 Bridge模式 115\r\n10.1 概览 115\r\n10.2 Bridge模式简介 115\r\n10.3 学习Bridge模式:示例 116\r\n10.4 对使用设计模式的观察 125\r\n10.5 学习Bridge模式:通过将它推演出来 126\r\n10.6 Bridge模式回顾 133\r\n10.7 实践注记:使用Bridge模式 134\r\n10.8 小结 137\r\n复习题 139\r\n简答题 139\r\n阐述题 139\r\n观点与应用题 139\r\n\r\n第11章 Abstract Factory模式 140\r\n11.1 概览 140\r\n11.2 Abstract Factory模式简介 140\r\n11.3 学习Abstract Factory模式:示例 140\r\n11.4 学习Abstract Factory模式:实现该模式 146\r\n11.5 实践注记:Abstract Factory模式 151\r\n11.6 将Abstract Factory模式与CAD/CAM问题联系起来 153\r\n11.7 小结 153\r\n复习题 154\r\n简答题 154\r\n阐述题 154\r\n观点与应用题 154\r\n\r\n第四部分 组合起来:用模式思考\r\n\r\n第12章 专家设计之道 157\r\n12.1 概览 157\r\n12.2 添加特征的创建方式 157\r\n12.3 小结 163\r\n复习题 163\r\n简答题 163\r\n阐述题 164\r\n观点与应用题 164\r\n\r\n第13章 用模式解决CAD/CAM问题 165\r\n13.1 概览 165\r\n13.2 对CAD/CAM问题的回顾 165\r\n13.3 用模式思考 166\r\n13.4 用模式思考:步骤1 167\r\n13.5 用模式思考:步骤2a 168\r\n13.6 用模式思考:步骤2b 172\r\n13.7 用模式思考:步骤2c 175\r\n13.8 用模式思考:重复步骤2a和2b(Facade模式) 176\r\n13.9 用模式思考:重复步骤2a和2b(Adapter模式) 177\r\n13.10 用模式思考:重复步骤2a和2b(Abstract Factory模式) 177\r\n13.11 用模式思考:步骤3 178\r\n13.12 与原解决方案的比较 178\r\n13.13 小结 179\r\n复习题 180\r\n简答题 180\r\n阐述题 180\r\n观点与应用题 180\r\n\r\n第五部分 迈向新的设计方式\r\n\r\n第14章 设计模式的原则与策略 183\r\n14.1 概览 183\r\n14.2 开闭原则 184\r\n14.3 从背景设计原则 184\r\n14.4 封装变化原则 188\r\n14.5 抽象类与接口 189\r\n14.6 理性怀疑原则 190\r\n14.7 小结 190\r\n复习题 191\r\n简答题 191\r\n阐述题 191\r\n观点与应用题 191\r\n\r\n第15章 共性与可变性分析 192\r\n15.1 概览 192\r\n15.2 共性和可变性分析与应用程序设计 192\r\n15.3 用CVA解决CAD/CAM问题 193\r\n15.4 小结 197\r\n复习题 197\r\n简答题 197\r\n阐述题 197\r\n观点与应用题 198\r\n\r\n第16章 分析矩阵 199\r\n16.1 概览 199\r\n16.2 现实世界:充满变化 199\r\n16.3 国际电子商务系统案例研究:应对变化 200\r\n16.4 实践注记 206\r\n16.5 小结 209\r\n复习题 209\r\n简答题 209\r\n阐述题 209\r\n观点与应用题 209\r\n\r\n第17章 Decorator模式 210\r\n17.1 概览 210\r\n17.2 更多细节 210\r\n17.3 Decorator模式 212\r\n17.4 将Decorator模式应用到我们的案例研究 213\r\n17.5 另一个例子:输入/输出 216\r\n17.6 实践注记:使用Decorator模式 218\r\n17.7 Decorator模式的本质 219\r\n17.8 小结 220\r\n复习题 220\r\n简答题 220\r\n阐述题 220\r\n观点与应用题 220\r\n\r\n第六部分 其他重要模式\r\n\r\n第18章 Observer模式 223\r\n18.1 概览 223\r\n18.2 模式的分类 223\r\n18.3 国际电子商务案例的更多需求 224\r\n18.4 Observer模式 225\r\n18.5 将Observer模式应用到我们的案例研究 226\r\n18.6 实践注记:使用Observer模式 230\r\n18.7 小结 232\r\n复习题 232\r\n简答题 232\r\n阐述题 233\r\n观点与应用题 233\r\n\r\n第19章 Template Method模式 234\r\n19.1 概览 234\r\n19.2 案例研究的更多需求 234\r\n19.3 Template Method模式 235\r\n19.4 将Template Method模式应用到我们的案例研究 235\r\n19.5 使用Template Method模式减少冗余 236\r\n19.6 实践注记:使用Template Method模式 241\r\n19.7 小结 242\r\n复习题 243\r\n简答题 243\r\n阐述题 243\r\n\r\n第七部分 各种工厂模式\r\n\r\n第20章 来自设计模式的教益:各种工厂模式 247\r\n20.1 概览 247\r\n20.2 工厂 247\r\n20.3 再谈背景 248\r\n20.4 工厂遵循我们的准则 250\r\n20.5 限制变化的影响 251\r\n20.6 对工厂的另一种思考方式 251\r\n20.7 工厂的不同角色 252\r\n20.8 实践注记 252\r\n20.9 小结 253\r\n复习题 253\r\n简答题 253\r\n阐述题 253\r\n观点与应用题 253\r\n\r\n第21章 Singleton模式和Double-CheckedLocking模式 254\r\n21.1 概览 254\r\n21.2 Singleton模式简介 254\r\n21.3 将Singleton模式应用到我们的案例研究 255\r\n21.4 一种变体:Double-Checked Locking模式 257\r\n21.5 反思 260\r\n21.6 实践注记:使用Singleton模式和 260\r\nDouble-Checked Locking模式 260\r\n21.7 小结 261\r\n复习题 261\r\n简答题 261\r\n阐述题 261\r\n观点与应用题 261\r\n\r\n第22章 Object Pool模式 262\r\n22.1 概览 262\r\n22.2 一个需要对对象进行管理的问题 262\r\n22.3 Object Pool模式 268\r\n22.4 观察:工厂的作用不仅是实例化 268\r\n22.5 小结 270\r\n复习题 270\r\n简答题 270\r\n阐述题 271\r\n观点与应用题 271\r\n\r\n第23章 Factory Method模式 272\r\n23.1 概览 272\r\n23.2 案例研究的更多需求 272\r\n23.3 Factory Method模式 273\r\n23.4 Factory Method模式与面向对象语言 273\r\n23.5 实践注记:使用Factory Method模式 274\r\n23.6 小结 275\r\n复习题 276\r\n简答题 276\r\n阐述题 276\r\n观点与应用题 276\r\n\r\n第24章 工厂模式的总结 277\r\n24.1 概览 277\r\n24.2 软件开发过程中的步骤 277\r\n24.3 工厂与极限编程实践殊途同归 278\r\n24.4 系统的扩展性 278\r\n\r\n第八部分 终点与起点\r\n\r\n第25章 设计模式回顾:总结与新起点 283\r\n25.1 概览 283\r\n25.2 面向对象原则的总结 283\r\n25.3 设计模式如何封装实现 284\r\n25.4 共性和可变性分析与设计模式 284\r\n25.5 按责任分解问题域 285\r\n25.6 模式和从背景设计 286\r\n25.7 模式内部的关联 286\r\n25.8 设计模式与敏捷编程实践 288\r\n25.9 实践注记 288\r\n25.10 小结 288\r\n复习题 289\r\n简答题 289\r\n阐述题 289\r\n观点与应用题 289\r\n\r\n第26章 参考书目 290\r\n26.1 本书配套网站 290\r\n26.2 推荐阅读 291\r\n26.3 针对Java程序员的推荐读物 292\r\n26.4 针对C++程序员的推荐读物 293\r\n26.5 针对COBOL程序员的推荐读物 294\r\n26.6 极限编程的推荐读物 294\r\n26.7 程序设计的一般性推荐读物 294\r\n26.8 个人推荐 295
Alan Shalloway 美国Net Objectives咨询/培训公司的创始人、CEO和资深顾问。他是麻省理工学院的计算机科学硕士,具有20多年面向对象咨询和软件开发的经验,并经常受邀在重要的软件开发会议(包括SDcExpro、JavacOne、OOP和OOPSLA)上演讲。 James R. Trott 是位于美国西北太平洋地区一家大型金融机构的资深顾问。他是应用数学科学硕士、MBA和跨文化研究艺术硕士。