同样是导演,为什么詹姆斯·卡梅隆、史蒂芬·斯皮尔伯格能够制作出令人惊心动魄的旷世巨著?同样是建筑师,为什么贝聿铭、圣地亚哥·卡拉特拉瓦能够创造出如此美丽、和谐、雄伟的建筑?同样是程序员或架构师,我们的作品又应该达到怎样的境界?诚然,技术和创造力我们都不缺,缺少的是为软件注入灵魂的方式和方法,“设计模式”正是这一系列方式和方法的集大成者。巧妙地应用设计模式可以让我们的代码更健壮、更易于理解和维护,从而显著提高系统的可靠性、稳定性、可维护性和可扩展性,这是成长为优秀程序员和架构师的必备技能。
《设计模式之禅(第2版)》由秦小波著,“他山之石,可以攻玉”,本书以亲切、自然的风格阐述了设计模式的核心思想,潜移默化地提升我们面向对象的架构和编程能力,带我们进入“物我合一、见性成佛”的最高设计境界。
《设计模式之禅(第2版)》由秦小波著,是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领域的里程碑著作。深刻解读6大设计原则和28种设计模式的准确定义、应用方法和最佳实践,全方位比较各种同类模式之间的异同,详细讲解将不同的模式组合使用的方法。第2版在第1版的基础上有两方面的改进,一方面结合读者的意见和建议对原有内容中的瑕疵进行了修正和完善,另一方面增加了4种新的设计模式,希望这一版能为广大程序员们奉上一场更加完美的设计模式盛宴!
《设计模式之禅(第2版)》共38章,分为五部分:第一部分(第1~6章),以一种全新的视角对面向对象程序设计的6大原则进行了深刻解读,旨在让读者能更深刻且准确地理解这些原则,为后面的学习打下基础;第二部分(第7~29章)通过大量生动的案例讲解和分析了23种最常用的设计模式,并进行了扩展讲解,通俗易懂,趣味性极强而又紧扣模式的核心;第三部分(第30~33章)对同类型和相关联的模式进行了深入分析和比较,旨在阐明各种设计模式之间的差别以及它们的理想应用场景;第四部分(第34~36章)探讨了如何在实际开发中将各种设计模式混合起来使用,以发挥设计模式的最大效用;第五部分(第37~38章)是本书的扩展篇,首先从实现的角度对MVC框架的原理进行了深入分析,然后讲解了5种新的设计模式的原理、意图和最佳实践。本书最后附有一份精美的设计模式彩图,可以裁剪,便于参考。
前言
第一部分 大旗不挥,谁敢冲锋—6大设计原则全新解读
第1章 单一职责原则
1.1我是“牛”类,我可以担任多职吗
1.2绝杀技,打破你的传统思维
1.3我单纯,所以我快乐
1.4最佳实践
第2章 里氏替换原则
2.1爱恨纠葛的父子关系
2.2纠纷不断,规则压制
2.3最佳实践
第3章 依赖倒置原则
3.1依赖倒置原则的定义
3.2言而无信,你太需要契约
3.3依赖的三种写法
3.4最佳实践
第4章 接口隔离原则
4.1接口隔离原则的定义
4.2美女何其多,观点各不同
4.3保证接口的纯洁性
4.4最佳实践
第5章 迪米特法则
5.1迪米特法则的定义
5.2我的知识你知道得越少越好
5.3最佳实践
第6章 开闭原则
6.1开闭原则的定义
6.2开闭原则的庐山真面目
6.3为什么要采用开闭原则
6.4如何使用开闭原则
6.5最佳实践
第二部分 真刀实枪—23种设计模式完美演绎
第7章 单例模式
7.1我是皇帝我独苗
7.2单例模式的定义
7.3单例模式的应用
7.3.1单例模式的优点
7.3.2单例模式的缺点
7.3.3单例模式的使用场景
7.3.4单例模式的注意事项
7.4单例模式的扩展
7.5最佳实践
第8章 工厂方法模式
8.1女娲造人的故事
8.2工厂方法模式的定义
8.3工厂方法模式的应用
8.3.1工厂方法模式的优点
8.3.2工厂方法模式的使用场景
8.4工厂方法模式的扩展
8.5最佳实践
第9章 抽象工厂模式
9.1女娲的失误
9.2抽象工厂模式的定义
9.3抽象工厂模式的应用
9.3.1抽象工厂模式的优点
9.3.2抽象工厂模式的缺点
9.3.3抽象工厂模式的使用场景
9.3.4抽象工厂模式的注意事项
9.4最佳实践
第10章 模板方法模式
10.1辉煌工程—制造悍马
10.2模板方法模式的定义
10.3模板方法模式的应用
10.3.1模板方法模式的优点
10.3.2模板方法模式的缺点
10.3.3模板方法模式的使用场景
10.4模板方法模式的扩展
10.5最佳实践
第11章 建造者模式
11.1变化是永恒的
11.2建造者模式的定义
11.3建造者模式的应用
11.3.1建造者模式的优点
11.3.2建造者模式的使用场景
11.3.3建造者模式的注意事项
11.4建造者模式的扩展
11.5最佳实践
第12章 代理模式
12.1我是游戏至尊
12.2代理模式的定义
12.3代理模式的应用
12.3.1代理模式的优点
12.3.2代理模式的使用场景
12.4代理模式的扩展
12.4.1普通代理
12.4.2强制代理
12.4.3代理是有个性的
12.4.4动态代理
12.5最佳实践
第13章 原型模式
13.1个性化电子账单
13.2原型模式的定义
13.3原型模式的应用
13.3.1原型模式的优点
13.3.2原型模式的使用场景
13.4原型模式的注意事项
13.4.1构造函数不会被执行
13.4.2浅拷贝和深拷贝
13.4.3clone与final两个冤家
13.5最佳实践
第14章 中介者模式
14.1进销存管理是这个样子的吗
14.2中介者模式的定义
14.3中介者模式的应用
14.3.1中介者模式的优点
14.3.2中介者模式的缺点
14.3.3中介者模式的使用场景
14.4中介者模式的实际应用
14.5最佳实践
第15章 命令模式
15.1项目经理也难当
15.2命令模式的定义
15.3命令模式的应用
15.3.1命令模式的优点
15.3.2命令模式的缺点
15.3.3命令模式的使用场景
15.4命令模式的扩展
15.4.1未讲完的故事
15.4.2反悔问题
15.5最佳实践
第16章 责任链模式
16.1古代妇女的枷锁—“三从四德”
16.2责任链模式的定义
16.3责任链模式的应用
16.3.1责任链模式的优点
16.3.2责任链模式的缺点
16.3.3责任链模式的注意事项
16.4最佳实践
第17章 装饰模式
17.1罪恶的成绩单
17.2装饰模式的定义
17.3装饰模式应用
17.3.1装饰模式的优点
17.3.2装饰模式的缺点
17.3.3装饰模式的使用场景
17.4最佳实践
第18章 策略模式
18.1刘备江东娶妻,赵云他容易吗
18.2策略模式的定义
18.3策略模式的应用
18.3.1策略模式的优点
18.3.2策略模式的缺点
18.3.3策略模式的使用场景
18.3.4策略模式的注意事项
18.4策略模式的扩展
18.5最佳实践
第19章 适配器模式
19.1业务发展—上帝才能控制
19.2适配器模式的定义
19.3适配器模式的应用
19.3.1适配器模式的优点
19.3.2适配器模式的使用场景
19.3.3适配器模式的注意事项
19.4适配器模式的扩展
19.5最佳实践
第20章 迭代器模式
20.1整理项目信息—苦差事
20.2迭代器模式的定义
20.3迭代器模式的应用
20.4最佳实践
第21章 组合模式
21.1公司的人事架构是这样的吗
21.2组合模式的定义
21.3组合模式的应用
21.3.1组合模式的优点
21.3.2组合模式的缺点
21.3.3组合模式的使用场景
21.3.4组合模式的注意事项
21.4组合模式的扩展
21.4.1真实的组合模式
21.4.2透明的组合模式
21.4.3组合模式的遍历
21.5最佳实践
第22章 观察者模式
22.1韩非子身边的卧底是谁派来的
22.2观察者模式的定义
22.3观察者模式的应用
22.3.1观察者模式的优点
22.3.2观察者模式的缺点
22.3.3观察者模式的使用场景
22.3.4观察者模式的注意事项
22.4观察者模式的扩展
22.4.1Java世界中的观察者模式
22.4.2项目中真实的观察者模式
22.4.3订阅发布模型
22.5最佳实践
第23章 门面模式
23.1我要投递信件
23.2门面模式的定义
23.3门面模式的应用
23.3.1门面模式的优点
23.3.2门面模式的缺点
23.3.3门面模式的使用场景
23.4门面模式的注意事项
23.4.1一个子系统可以有多个门面
23.4.2门面不参与子系统内的业务逻辑
23.5最佳实践
第24章 备忘录模式
24.1如此追女孩子,你还不乐
24.2备忘录模式的定义
24.3备忘录模式的应用
24.3.1备忘录模式的使用场景
24.3.2备忘录模式的注意事项
24.4备忘录模式的扩展
24.4.1clone方式的备忘录
24.4.2多状态的备忘录模式
24.4.3多备份的备忘录
24.4.4封装得更好一点
24.5最佳实践
第25章 访问者模式
25.1员工的隐私何在
25.2访问者模式的定义
25.3访问者模式的应用
25.3.1访问者模式的优点
25.3.2访问者模式的缺点
25.3.3访问者模式的使用场景
25.4访问者模式的扩展
25.4.1统计功能
25.4.2多个访问者
25.4.3双分派
25.5最佳实践
第26章 状态模式
26.1城市的纵向发展功臣—电梯
26.2状态模式的定义
26.3状态模式的应用
26.3.1状态模式的优点
26.3.2状态模式的缺点
26.3.3状态模式的使用场景
26.3.4状态模式的注意事项
26.4最佳实践
第27章 解释器模式
27.1四则运算你会吗
27.2解释器模式的定义
27.3解释器模式的应用
27.3.1解释器模式的优点
27.3.2解释器模式的缺点
27.3.3解释器模式使用的场景
27.3.4解释器模式的注意事项
27.4最佳实践
第28章 享元模式
28.1内存溢出,司空见惯
28.2享元模式的定义
28.3享元模式的应用
28.3.1享元模式的优点和缺点
28.3.2享元模式的使用场景
28.4享元模式的扩展
28.4.1线程安全的问题
28.4.2性能平衡
28.5最佳实践
第29章 桥梁模式
29.1我有一个梦想
29.2桥梁模式的定义
29.3桥梁模式的应用
29.3.1桥梁模式的优点
29.3.2桥梁模式的使用场景
29.3.3桥梁模式的注意事项
29.4最佳实践
第三部分 谁的地盘谁做主—设计模式PK
第30章 创建类模式大PK
30.1工厂方法模式VS建造者模式
30.1.1按工厂方法建造超人
30.1.2按建造者模式建造超人
30.1.3最佳实践
30.2抽象工厂模式VS建造者模式
30.2.1按抽象工厂模式生产车辆
30.2.2按建造者模式生产车辆
30.2.3最佳实践
第31章 结构类模式大PK
31.1代理模式VS装饰模式
31.1.1代理模式
31.1.2装饰模式
31.1.3最佳实践
31.2装饰模式VS适配器模式
31.2.1用装饰模式描述丑小鸭
31.2.2用适配器模式实现丑小鸭
31.2.3最佳实践
第32章 行为类模式大PK
32.1命令模式VS策略模式
32.1.1策略模式实现压缩算法
32.1.2命令模式实现压缩算法
32.1.3小结
32.2策略模式VS状态模式
32.2.1策略模式实现人生
32.2.2状态模式实现人生
32.2.3小结
32.3观察者模式VS责任链模式
32.3.1责任链模式实现DNS解析过程
32.3.2触发链模式实现DNS解析过程2
32.3.3小结
第33章 跨战区PK
33.1策略模式VS桥梁模式
33.1.1策略模式实现邮件发送
33.1.2桥梁模式实现邮件发送
33.1.3最佳实践
33.2门面模式VS中介者模式
33.2.1中介者模式实现工资计算
33.2.2门面模式实现工资计算
33.2.3最佳实践
33.3包装模式群PK
33.3.1代理模式
33.3.2装饰模式
33.3.3适配器模式
33.3.4桥梁模式
33.3.5最佳实践
第四部分 完美世界—设计模式混编
第34章 命令模式+责任链模式
34.1搬移UNIX的命令
34.2混编小结
第35章 工厂方法模式+策略模式
35.1迷你版的交易系统
35.2混编小结
第36章 观察者模式+中介者模式
36.1事件触发器的开发
36.2混编小结
第五部分 扩展篇
第37章 MVC框架
37.1MVC框架的实现
37.1.1MVC的系统架构
37.1.2模型管理器
37.1.3值栈
37.1.4视图管理器
37.1.5工具类
37.2最佳实践
第38章 新模式
38.1规格模式
38.1.1规格模式的实现
38.1.2最佳实践
38.2对象池模式
38.2.1正确的池化
38.2.2对象池模式的意图
38.2.3最佳实践
38.3雇工模式
38.3.1雇工合作
38.3.2雇工模式的意图
38.3.3最佳实践
38.4黑板模式
38.4.1黑板模式的意图
38.4.2黑板模式的实现方法
38.5空对象模式
38.5.1空对象模式的例子
38.5.2最佳实践
附录 23种设计模式彩图