漫谈设计模式:从面向对象开始(奋斗的小鸟)_PDF 电子书

 

下载地址:http://pan.baidu.com/share/link?shareid=626554255&uk=721744522

内容简介

  模式引入计算机科学领域已经有20余年了,最初人们侧重于面向对象的设计,而现在已经应用于计算机领域的各个方面,它们对计算机产生了深远影响。
  若想一本书涵盖所有模式,那么《漫谈设计模式:从面向对象开始》将会非常庞大,以前的设计模式书籍专注于介绍设计模式,虽然读者了解了这些设计模式,但是仍然不知道如何合理地使用它们,往往导致读者为了使用设计模式而设计,而不是从问题出发,使用设计模式优雅地解决这些问题。
  《漫谈设计模式:从面向对象开始》主要从最基本的设计模式入手,并结合一些J2EE开发过程经常遇见的技术和概念,你将全面理解这10多个设计模式,并在开发过程中,让你真正体会和思考面向对象编程的思想,也只有掌握这些,你才会能成为一位真正的设计专家。
  《漫谈设计模式:从面向对象开始》不是一本面向对象和Java语言的入门书籍,阅读对象主要是从事Java语言的软件开发人员但不限于Java语言的开发人员。

作者简介

  刘济华,现任惠普公司ITSM顾问,曾在电信、金融、保险等多个行业参与开发了多个大型项目和产品,参与过UMS系统、保险核心业务系统、银行系统、CRM系统、ITSM系统软件研发。热衷于编写优良代码以及研究如何提高开发效率,对面向对象开发与设计有较深层次理解,致力于使用OOP为复杂领域问题建模。喜欢钻研并应用一些出色的模式,以及支持软件高效开发设计的流程和方法,是领域驱动开发(Domain-Driven Design)和敏捷(Agile)开发方法的忠实粉丝。
 

目录

第一篇 模式介绍
第1章 谈面向对象和模式
1.1 什么是对象
1.2 面向对象的好处
1.3 重用
1.4 模式简史
1.5 什么是模式
1.6 学习设计模式的一些常见 问题
1.7 本章关键词
第2章 第1个模式——模板 方法(template method) 模式
2.1 从回家过年说起
2.1.1 dry(don't repeat yourself)
2.1.2 变化+重复,如何 维护
2.2 模板方法(template method) 模式
2.2.1 使用继承
2.2.2 模板方法模式
2.3 引入回调(callback)
2.4 总结
2.5 本章关键词
第二篇 创建对象
第3章 单例(singleton)模式
3.1 最简单的单例
3.2 进阶
3.2.1 延迟创建
3.2.2 线程安全
3.2.3 double-check locking
3.2.4 initialization on demand holder
3.2.5 singleton的序列化
3.3 总结
3.4 本章关键词
第4章 工厂方法(factory method) 模式
4.1 工厂方法模式
4.1.1 类图
4.1.2 创建数据库连接对象
4.2 静态工厂方法
4.3 总结
4.4 本章关键词
第5章 原型(prototype)模式
5.1 原型模式
5.2 寄个快递
5.3 实现
5.3.1 uml静态类图
5.3.2 代码实现
5.4 深拷贝(deep copy)
5.5 总结
5.6 本章关键词
第6章 控制反转(ioc)
6.1 从创建对象谈起
6.2 使用工厂方法模式的问题
6.3 inversion of control(控制反转)
6.3.1 ioc和di(dependency injection,依赖注入)
6.3.2 service locator(服务定位器)
6.3.3 dependency injection
6.4 总结
6.5 本章关键词
第三篇 构建复杂结构
第7章 装饰器(decorator)模式
7.1 记录历史修改
7.2 open-closed principle(开放-封闭原则,ocp)
7.3 装饰器(decorator)模式
7.3.1 类图
7.3.2 实现
7.3.3 一点变化
7.3.4 如何使用
7.3.5 测试
7.4 装饰器模式的优缺点
7.5 总结
7.6 本章关键词
第8章 代理(proxy)模式
8.1 代理(proxy)模式
8.1.1 类图
8.1.2 访问分布式对象
8.2 j2se动态代理
8.2.1 类和接口
8.2.2 调用原理
8.2.3 实现同步
8.2.4 总结
8.3 和装饰器(decorator)模式的比较
8.4 总结
8.5 本章关键词
第9章 适配器(adapter)模式
9.1 打桩
9.2 其他适配器模式
9.2.1 类适配器
9.2.2 双向适配器
9.3 测试
9.4 和代理(proxy)模式的比较
9.5 总结
9.6 本章关键词
第10章 外观(facade)模式
10.1 外观(facade)模式
10.2 least knowledge principle(最少知识原则)
10.3 懒惰的老板请客
10.4 ejb里的外观模式
10.5 总结
10.6 本章关键词
第11章 组合(composite)模式
11.1 组合模式概述
11.1.1 类图
11.1.2 使用组合(composite)模式
11.1.3 测试
11.2 透明的组合模式
11.3 安全的组合模式vs透明的组合模式
11.4 还需要注意什么
11.5 总结
11.6 本章关键词
第四篇 行为模式
第12章 策略(strategy)模式
12.1 既要坐飞机又要坐大巴
12.2 封装变化
12.3 策略模式
12.4 还需要继承吗
12.5 优先使用合成而非继承
12.6 总结
12.7 本章关键词
第13章 状态(state)模式
13.1 电子颜料板
13.2 switch-case实现
13.3 如何封装变化
13.4 状态模式
13.5 使用enum类型
13.6 与策略(strategy)模式的比较
13.7 总结
13.8 本章关键词
第14章 观察者(observer)模式
14.1 股票价格变了多少
14.2 观察者模式
14.2.1 如何实现
14.2.2 观察者模式
14.2.3 java标准库的观察者
模式
14.3 总结
14.4 本章关键词
第五篇 终点还是起点
第15章 面向切面的编程(aop)
15.1 记录时间
15.2 aop(aspect-oriented programming)
15.2.1 一些重要概念
15.2.2 oop实现横切
15.2.3 aop实现技术
15.3 aop框架介绍
15.4 aop联盟(aop alliance)
15.5 使用aop编程的风险
15.6 oop还是aop
15.7 总结
15.8 本章关键词
第16章 面向对象开发
16.1 写在面向对象设计之前
16.2 汲取知识
16.3 横看成岭侧成峰
16.4 提炼模型
16.5 应用设计模式
16.6 不能脱离实现技术
16.7 重构
16.8 过度的开发(over-engineering)
16.9 总结
16.10 本章关键词
第17章 结语
17.1 感悟
17.2 面向对象的开发范式
17.3 一些原则
17.4 写在模式之后
17.5 本章关键词
附录 推荐阅读资源
1 java语言相关学习图书
2 j2ee技术相关图书
3 面向对象设计相关图书
4 给agile(敏捷)开发人员推荐的书籍
5 网站和论坛
参考文献
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言、持久存储、分布式计算和客户/服务器技术等。   本书内容精炼,示例简单明了,适合各层次面向对象开发人员阅读,也是高校相关专业面向对象课程的理想教学参考书。 第1章 面向对象概念介绍 1 1.1 过程式程序设计与OO程序设计 2 1.2 从过程式开发转向面向对象开发 4 1.2.1 过程式程序设计 5 1.2.2 OO程序设计 5 1.3 对象到底是什么 5 1.3.1 对象数据 5 1.3.2 对象行为 6 1.4 类到底是什么 9 1.4.1 类是对象模板 9 1.4.2 属性 11 1.4.3 方法 11 1.4.4 消息 11 1.5 使用UML完成类图建模 12 1.6 封装和数据隐藏 12 1.6.1 接口 12 1.6.2 实现 13 1.6.3 接口/实现范型的一个实际例子 13 1.6.4 接口/实现范型的模型 14 1.7 继承 15 1.7.1 超类和子类 16 1.7.2 抽象 16 1.7.3 is-a关系 17 1.8 多态 18 1.9 组合 20 1.9.1 抽象 21 1.9.2 has-a关系 21 1.10 小结 21 1.11 本章使用的示例代码 21 1.11.1 TestPerson示例:C#.NET 21 1.11.2 TestPerson示例:VB.NET 22 1.11.3 TestShape示例:C#.NET 23 1.11.4 TestShape示例:VB.NET 25 第2章 如何以对象方式思考 27 2.1 了解接口与实现之间的区别 28 2.1.1 接口 29 2.1.2 实现 29 2.1.3 接口/实现示例 29 2.2 设计接口时使用抽象思维 33 2.3 尽可能为用户提供最小接口 35 2.3.1 确定用户 35 2.3.2 对象行为 36 2.3.3 环境约束 36 2.3.4 明确公共接口 36 2.3.5 明确实现 37 2.4 小结 37 2.5 参考书目 38 第3章 高级面向对象概念 39 3.1 构造函数 39 3.1.1 何时调用构造函数 39 3.1.2 构造函数中有什么 40 3.1.3 默认构造函数 40 3.1.4 使用多个构造函数 41 3.1.5 构造函数的设计 44 3.2 错误处理 44 3.2.1 忽略问题 45 3.2.2 检查问题并中止应用 45 3.2.3 检查问题并尝试恢复 45 3.2.4 抛出异常 45 3.3 作用域概念 47 3.3.1 局部属性 48 3.3.2 对象属性 49 3.3.3 类属性 50 3.4 操作符重载 51 3.5 多重继承 52 3.6 对象操作 53 3.7 小结 54 3.8 参考书目 54 3.9 本章使用的示例代码 54 3.9.1 TestNumber示例:C#.NET 54 3.9.2 TestNumber示例:VB.NET 55 第4章 类剖析 57 4.1 类名 57 4.2 注释 58 4.3 属性 59 4.4 构造函数 60 4.5 访问方法 62 4.6 公共接口方法 63 4.7 私有实现方法 64 4.8 小结 64 4.9 参考书目 64 4.10 本章使用的示例代码 65 4.10.1 TestCab示例:C#.NET 65 4.10.2 TestCab示例:VB.NET 66 第5章 类设计指导原则 68 5.1 真实世界系统建模 68 5.2 明确公共接口 69 5.2.1 最小公共接口 69 5.2.2 隐藏实现 69 5.3 设计健壮的构造函数(和析构函数) 70 5.4 在类中设计错误处理 70 5.4.1 对类建立文档以及使用注释 71 5.4.2 构建类要以合作为出发点 71 5.5 设计时充分考虑重用 72 5.6 设计时充分考虑到可扩展性 72 5.6.1 名字要有描述性 72 5.6.2 抽出不可移植的代码 72 5.6.3 提供一种复制和比较对象的方法 73 5.6.4 让作用域尽可能小 73 5.6.5 类应当对自己负责 74 5.7 设计时充分考虑可维护性 75 5.7.1 使用迭代 76 5.7.2 测试接口 76 5.8 使用对象持久性 78 5.9 小结 79 5.10 参考书目 79 5.11 本章使用的示例代码 79 5.11.1 TestMath示例:C#.NET 79 5.11.2 TestMath示例:VB.NET 80 第6章 利用对象实现设计 81 6.1 设计指导原则 81 6.1.1 完成适当的分析 84 6.1.2 建立工作陈述 84 6.1.3 收集需求 84 6.1.4 开发用户界面的原型 85 6.1.5 明确类 85 6.1.6 确定各个类的职责 85 6.1.7 确定类如何相互合作 85 6.1.8 创建类模型来描述系统 85 6.2 案例研究:blackjack示例 86 6.2.1 使用CRC卡 87 6.2.2 明确blackjack类 88 6.2.3 明确类的职责 90 6.2.4 UML用例:明确协作关系 95 6.2.5 第一轮CRC卡 98 6.2.6 UML类图:对象模型 99 6.2.7 建立用户界面原型 100 6.3 小结 101 6.4 参考书目 101 第7章 掌握继承和组合 102 7.1 重用对象 102 7.2 继承 103 7.2.1 一般化和特殊化 105 7.2.2 设计决策 105 7.3 组合 107 7.4 为什么封装在OO中如此重要 109 7.4.1 继承如何削弱封装 109 7.4.2 多态的一个详细例子 111 7.4.3 对象职责 111 7.5 小结 115 7.6 参考书目 115 7.7 本章使用的示例代码 115 7.7.1 TestShape示例:C#.NET 115 7.7.2 TestShape示例:VB.NET 117 第8章 框架与重用:使用接口和抽象类实现设计 119 8.1 代码:重用还是不重用 119 8.2 什么是框架 119 8.3 什么是契约 121 8.3.1 抽象类 122 8.3.2 接口 124 8.3.3 集成 125 8.3.4 编译器的证明 127 8.3.5 建立契约 128 8.3.6 系统插入点 130 8.4 一个电子商务例子 130 8.4.1 电子商务问题 130 8.4.2 非重用的方法 131 8.4.3 一个电子商务解决方案 133 8.4.4 UML对象模型 133 8.5 小结 137 8.6 参考书目 137 8.7 本章使用的示例代码 138 8.7.1 TestShape示例:C#.NET 138 8.7.2 TestShape示例:VB.NET 140 第9章 构建对象 143 9.1 组合关系 143 9.2 分阶段构建 144 9.3 不同类型的组合 146 9.3.1 聚集 146 9.3.2 关联 146 9.3.3 结合使用关联和聚集 148 9.4 避免依赖性 148 9.5 基数 149 9.5.1 多个对象关联 151 9.5.2 可选关联 151 9.6 集成示例 152 9.7 小结 152 9.8 参考书目 153 第10章 用UML创建对象模型 154 10.1 什么是UML 154 10.2 类图的结构 155 10.3 属性和方法 156 10.3.1 属性 156 10.3.2 方法 157 10.4 访问指示 157 10.5 继承 158 10.6 接口 159 10.7 组合 160 10.7.1 聚集 160 10.7.2 关联 161 10.8 基数 161 10.9 小结 162 10.10 参考书目 163 第11章 对象和可移植数据:XML 164 11.1 可移植数据 164 11.2 XML 165 11.3 XML与HTML 166 11.4 XML和面向对象语言 166 11.5 两个公司间共享数据 167 11.6 用DTD验证文档 168 11.7 将DTD集成到XML文档 170 11.8 使用层叠样式表 175 11.9 小结 177 11.10 参考书目 177 第12章 持久对象:串行化和关系数据库 178 12.1 持久对象基础 178 12.2 将对象保存到平面文件 179 12.2.1 串行化文件 180 12.2.2 再谈实现和接口 182 12.2.3 方法如何保存 183 12.3 串行化过程中使用XML 183 12.4 写到关系数据库 186 12.5 加载驱动程序 189 12.5.1 建立连接 189 12.5.2 SQL语句 190 12.6 小结 192 12.7 参考书目 192 12.8 本章使用的示例代码 192 12.8.1 Person类示例:C#.NET 193 12.8.2 Person类示例:VB.NET 195 第13章 对象与因特网 197 13.1 分布式计算的演进 197 13.2 基于对象的脚本语言 197 13.3 JavaScript验证示例 200 13.4 Web页面中的对象 202 13.4.1 JavaScript对象 202 13.4.2 Web页面控件 204 13.4.3 声音播放器 205 13.4.4 电影播放器 205 13.4.5 Flash 206 13.5 分布式对象和企业 206 13.5.1 公共对象请求代理体系结构(CORBA) 207 13.5.2 Web服务定义 210 13.5.3 Web服务代码 213 13.5.4 Invoice.cs 214 13.5.5 Invoice.vb 215 13.6 小结 216 13.7 参考书目 216 第14章 对象和客户/服务器应用 217 14.1 客户/服务器方法 217 14.2 专有方法 217 14.2.1 串行化对象代码 218 14.2.2 客户代码 218 14.2.3 服务器代码 220 14.2.4 运行专有的客户/服务器示例 222 14.3 非专有方法 223 14.3.1 对象定义代码 223 14.3.2 客户代码 224 14.3.3 服务器代码 225 14.3.4 运行非专有的客户/服务器示例 227 14.4 小结 228 14.5 参考书目 228 14.6 本章使用的示例代码 228 14.6.1 客户/服务器示例——VB.NET:对象定义代码 228 14.6.2 客户/服务器示例——VB.NET:客户代码 229 14.6.3 客户/服务器示例——VB.NET:服务器代码 230 第15章 设计模式 232 15.1 为什么研究设计模式 232 15.2 Smalltalk的模型/视图/控制器 233 15.3 设计模式的不同类型 234 15.3.1 创建型模式 235 15.3.2 结构型模式 239 15.3.3 行为型模式 241 15.4 反模式 242 15.5 小结 243 15.6 参考书目 243 15.7 本章使用的示例代码 243 15.7.1 C#.NET 244 15.7.2 VB.NET 247 索引 250
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值