Design patterns in Ruby
副标题:无
分类号:
ISBN:9787111251200
微信扫一扫,移动浏览光盘
简介
大多数关于设计模式的书都是基于C++和Java的。而Ruby是一门十分特
别的语言,Ruby的特性使设计模式的实现和应用都变得更加简单。在本书
中,Russ Olsen演示了如何将Ruby语言的强大和优雅与设计模式相融合,
从而用更少的代码编写出更完善和高效的软件。
在纵览了设计模式的历史、概念和意义之后,作者给出了Ruby语言的
快速入门,使不同经验程度的软件开发者都能立刻开始在Ruby中运用设计
模式。本书着重介绍可以简化设计模式使用的Ruby语言特性,比如动态类
型、代码闭包和混入法等,这些特性大大提高了代码的可复用性。
本书从Ruby的角度阐释了“四人组”所提出的设计模式中的14个,分
别介绍了这些设计模式所解决的问题,讨论这些模式的经典实现方法在
Ruby环境中是否理想,并介绍针对Ruby进行的优化。很多设计模式在Ruby
中通过一两行简单的代码即可实现,而无需编写像在其他语言中所必需的
繁琐的模板代码。
本书总结了Ruby社区中出现的新模式并定义了创造性的新设计模式。
这些新模式包括使用元编程来创建自定义对象,基于Rails、强大的“惯例
优于配置”模式,帮助整合整个程序和框架等。
本书具有实用的特质,帮助你构建更完美的软件,愉悦你的Ruby编程
体验,获得更多的回报。
目录
第1章 使用设计模式创建更好的程序. 24
1.1 四人组 24
1.2 模式的模式 25
1.2.1 把变更的和不变的事物分开 25
1.2.2 针对接口编程而不对实现编程 25
1.2.3 组合优先于继承 27
1.2.4 代理,代理,代理 30
1.2.5 你不会用到它 31
1.2.6 23种模式中的14种 32
1.2.7 Ruby中的设计模式? 34
第2章 从Ruby起步 36
2.1 交互式Ruby 36
2.2 说:你好世界 37
2.3 变量 39
2.4 Fixnums 和 Bignums 40
2.5 浮点数 41
2.6 这里没有原始类型 41
2.7 但是有时没有对象 42
2.8 真的,否的和nil 43
2.9 判定,判定 44
2.10 循环 45
2.11 更多关于字符串 47
2.12 符号(Symbols) 50
2.13 数组 50
2.14 哈希 52
2.15 正则表达式 52
2.16 你自己的类 53
2.17 获取一个实例变量 54
2.18 一个对象问:我是谁? 56
2.19 继承,子类和超类 57
2.20 参数选项 58
2.21 模组 59
2.22 异常 61
2.23 线程 62
2.24 管理分散的源文件 63
2.25 本章回顾 64
第3章 使用模板方法来变换算法 67
3.1 向现实中的挑战接招 67
3.2 将不变的部分独立出来 68
3.3 探究模板方法模式 71
3.4 钩子方法 71
3.5 但是类型声明都去哪里了? 73
3.6 类型,安全和灵活性 74
3.7 单元测试并非可有可无的 76
3.8 使用和滥用模板方法模式 77
3.9 现实中的模板方法模式应用 78
3.10 本章回顾 79
第4章 使用策略替换算法 81
4.1 代理,代理,还是代理 81
4.2 在策略和环境中共享数据 83
4.3 再说鸭子类型 84
4.4 Proc和代码块 85
4.5 快速而随性的策略对象 89
4.6 应用和滥用策略模式 90
4.7 现实中的策略模式 91
4.8 本章回顾 92
第5章 通过观察器来保持协调 94
5.1 随时待命 94
5.2 更好的随时待命方法 95
5.3 抽取出支持可被观察能力的代码 98
5.4 使用代码块作为观察器 100
5.5 观察器的异体 102
5.6 应用和滥用观察器模式 102
5.7 现实中的观察器模式 103
5.8 本章回顾 105
第6章 使用组合模式将各部分组成整体 107
6.1 整体和部分 107
6.2 创建组合 108
6.3 使用运算符将组合模式打扮整齐 112
6.4 给予数组的组合类? 112
6.5 一种不方便的差异 113
6.6 给各层次指明方向 114
6.7 应用和滥用组合模式 115
6.8 现实中的组合模式 116
6.9 本章回顾 117
第7章 通过迭代器遍历集合 120
7.1 外部迭代器 120
7.2 内部迭代器 122
7.3 比较内部迭代器和外部迭代器 123
7.4 无可比拟的Enumerable(可枚举对象) 124
7.5 应用和滥用迭代器模式 125
7.6 现实中的迭代器应用 127
7.7 本章回顾 130
第8章 使用命令模式来完成任务 131
8.1 子类的爆炸 131
8.2 一个更简便的方法 132
8.3 代码块即命令 133
8.4 用于记录操作的命令 134
8.5 使用命令来取消一个操作 137
8.6 命令队列 139
8.7 应用和滥用命令模式 139
8.8 现实中命令模式的应用 140
8.8.1 ActiveRecord数据移植 140
8.8.2 Madeleine 141
8.9 本章回顾 144
第9章 使用适配器来填补空隙 147
9.1 软件适配器 147
9.2 差点就错过 149
9.3 适配器的另一种选择?.. 151
9.4 修改单个实例 152
9.5 适配还是修改? 153
9.6 应用和滥用适配器模式 154
9.7 适配器模式的实际应用 154
9.8 本章回顾 154
第10章 通过代理来到你的对象面前 156
10.1 使用代理来拯救 156
10.2 保护代理 158
10.3 远程代理 159
10.4 虚拟代理让人变懒 160
10.5 取消代理的苦差事 161
10.6 消息传递和方法。 161
10.7 method_missing方法 162
10.8 发送消息 163
10.9 无痛的代理 164
10.10 应用和滥用代理 166
10.11 现实中代理模式的应用 167
10.12 本章回顾 168
第11章 使用装饰器改善你的对象 170
11.1 装饰器:丑陋代码的解药 170
11.2 正式装饰 176
11.3 减轻代理的郁闷 176
11.4 代理器模式的另一种动态方式 177
11.4.1 装饰方法 177
11.5 使用模组来装饰 178
11.6 应用和滥用装饰器模式 178
11.7 现实中的装饰器应用 179
11.8 本章回顾 180
第12章 使用单例来确保仅有一个 181
12.1 一个对象,全局可访 181
12.2 类变量和类方法 181
12.2.1 类变量 181
12.3 类方法 182
12.4 Ruby中的单例应用的第一次尝试 183
12.4.1 管理单个实例 184
12.5 确保只有一个 185
12.6 单例模组 186
12.7 勤性单例和惰性单例 186
12.8 其他单例模式的实现方法 187
12.8.1 使用全局变量作为单例 187
12.9 使用类作为单例 187
12.10 使用模组作为单例 189
12.11 安全带还是拘束衣? 189
12.12 使用和滥用单例模式 190
12.12.1 它们实际上就是全局变量,对不对? 190
12.12.2 你到底需要多少单例? 191
12.12.3 在一个需要知道的基础上的单例 191
12.12.4 减轻测试的郁闷 193
12.13 现实中的单例模式应用 193
12.14 本章回顾 194
第13章 使用工厂模式挑选正确的类 196
13.1 一种不同的鸭子类型 196
13.2 模板方法再露一手 198
13.3 参数化的工作方法 200
13.4 类也就是对象 202
13.5 坏消息:你的程序搞大了 203
13.6 对象创建的组合 204
13.7 再说一次,类就是一种对象 206
13.8 协调名字 207
13.9 使用和滥用工厂模式 208
13.10 现实中的工厂模式的应用 208
13.11 本章回顾 210
第14章 通过生成器来简化对象创建 212
14.1 制造计算机 212
14.2 多态的构造器 215
14.3 构造器能保证产生健全的对象 217
14.4 可重用的构造器 217
14.5 使用魔术方法制作更好的构造器 218
14.6 应用和滥用构造器模式 219
14.7 现实中的构造器模式应用 219
14.8 本章回顾 220
第15章 使用解释器来组建你的系统 222
15.1 用以完成任务的正确语言 222
15.2 构建一个解析器 223
15.3 一个文件查找解析器 224
15.3.1 查找所有文件 224
15.3.2 根据文件夹来查找文件 225
15.3.3 大文件和可写文件 226
15.3.4 加入Not, And和Or的更复杂的检索 227
15.4 创建AST 229
15.4.1 一个简单的分析器 229
15.5 一个没有分析器的解析器? 231
15.6 让XML和YAML来做分析工作? 232
15.6.1 为更复杂的分析器使用Racc 233
15.6.2 让Ruby来做分析? 233
15.7 应用和滥用解析器模式 233
15.8 现实中的解析器模式应用 234
15.9 本章回顾 235
第16章 采用域指定语言来打开你的系统 237
16.1 特定语言的域 237
16.2 一个备份文件的DSL 238
16.3 它是数据文件——不!它是一个程序! 238
16.4 构建PackRat 239
16.5 将我们的DSL合成一体 241
16.6 评估PackRat 241
16.7 改进PackRat 242
16.8 应用和滥用内部DSL 244
16.9 内部DSL在现实中的应用 245
16.10 本章回顾 246
第17章 使用元编程创建自定义对象 248
17.1 通过方法来度身定制的对象和方法 248
17.2 通过模组来自定义对象和模组 250
17.3 凭空招呼出崭新的方法 251
17.4 到对象的内部看看 254
17.5 应用和滥用元编程 255
17.6 现实中的元编程应用 256
17.7 本章回顾 258
第18章 惯例优于配置 260
18.1 一个优秀的用户界面——对于开发者 261
18.1.1 预期需求 261
18.1.2 让他们只说一次 261
18.1.3 提供一个模板 262
18.2 一个消息中转器 262
18.3 选择适配器 264
18.4 载入类 265
18.5 增加一些安全性 267
18.6 帮助用户开始使用 268
18.7 评估消息中转器 269
18.8 应用和滥用惯例优于配置 269
18.9 惯例优于配置在现实中的应用 270
18.10 本章回顾 270
第19章 总结 273
附录 A 得到Ruby 275
在Microsoft Windows上安装Ruby 275
在Linux和其他UNIX风格的系统上安装Ruby 275
Mac OS X 275
附录B 深挖 276
设计模式 276
Ruby 276
正则表达式 277
博客和网站 278
附录C 关键词翻译参照表... 279
1.1 四人组 24
1.2 模式的模式 25
1.2.1 把变更的和不变的事物分开 25
1.2.2 针对接口编程而不对实现编程 25
1.2.3 组合优先于继承 27
1.2.4 代理,代理,代理 30
1.2.5 你不会用到它 31
1.2.6 23种模式中的14种 32
1.2.7 Ruby中的设计模式? 34
第2章 从Ruby起步 36
2.1 交互式Ruby 36
2.2 说:你好世界 37
2.3 变量 39
2.4 Fixnums 和 Bignums 40
2.5 浮点数 41
2.6 这里没有原始类型 41
2.7 但是有时没有对象 42
2.8 真的,否的和nil 43
2.9 判定,判定 44
2.10 循环 45
2.11 更多关于字符串 47
2.12 符号(Symbols) 50
2.13 数组 50
2.14 哈希 52
2.15 正则表达式 52
2.16 你自己的类 53
2.17 获取一个实例变量 54
2.18 一个对象问:我是谁? 56
2.19 继承,子类和超类 57
2.20 参数选项 58
2.21 模组 59
2.22 异常 61
2.23 线程 62
2.24 管理分散的源文件 63
2.25 本章回顾 64
第3章 使用模板方法来变换算法 67
3.1 向现实中的挑战接招 67
3.2 将不变的部分独立出来 68
3.3 探究模板方法模式 71
3.4 钩子方法 71
3.5 但是类型声明都去哪里了? 73
3.6 类型,安全和灵活性 74
3.7 单元测试并非可有可无的 76
3.8 使用和滥用模板方法模式 77
3.9 现实中的模板方法模式应用 78
3.10 本章回顾 79
第4章 使用策略替换算法 81
4.1 代理,代理,还是代理 81
4.2 在策略和环境中共享数据 83
4.3 再说鸭子类型 84
4.4 Proc和代码块 85
4.5 快速而随性的策略对象 89
4.6 应用和滥用策略模式 90
4.7 现实中的策略模式 91
4.8 本章回顾 92
第5章 通过观察器来保持协调 94
5.1 随时待命 94
5.2 更好的随时待命方法 95
5.3 抽取出支持可被观察能力的代码 98
5.4 使用代码块作为观察器 100
5.5 观察器的异体 102
5.6 应用和滥用观察器模式 102
5.7 现实中的观察器模式 103
5.8 本章回顾 105
第6章 使用组合模式将各部分组成整体 107
6.1 整体和部分 107
6.2 创建组合 108
6.3 使用运算符将组合模式打扮整齐 112
6.4 给予数组的组合类? 112
6.5 一种不方便的差异 113
6.6 给各层次指明方向 114
6.7 应用和滥用组合模式 115
6.8 现实中的组合模式 116
6.9 本章回顾 117
第7章 通过迭代器遍历集合 120
7.1 外部迭代器 120
7.2 内部迭代器 122
7.3 比较内部迭代器和外部迭代器 123
7.4 无可比拟的Enumerable(可枚举对象) 124
7.5 应用和滥用迭代器模式 125
7.6 现实中的迭代器应用 127
7.7 本章回顾 130
第8章 使用命令模式来完成任务 131
8.1 子类的爆炸 131
8.2 一个更简便的方法 132
8.3 代码块即命令 133
8.4 用于记录操作的命令 134
8.5 使用命令来取消一个操作 137
8.6 命令队列 139
8.7 应用和滥用命令模式 139
8.8 现实中命令模式的应用 140
8.8.1 ActiveRecord数据移植 140
8.8.2 Madeleine 141
8.9 本章回顾 144
第9章 使用适配器来填补空隙 147
9.1 软件适配器 147
9.2 差点就错过 149
9.3 适配器的另一种选择?.. 151
9.4 修改单个实例 152
9.5 适配还是修改? 153
9.6 应用和滥用适配器模式 154
9.7 适配器模式的实际应用 154
9.8 本章回顾 154
第10章 通过代理来到你的对象面前 156
10.1 使用代理来拯救 156
10.2 保护代理 158
10.3 远程代理 159
10.4 虚拟代理让人变懒 160
10.5 取消代理的苦差事 161
10.6 消息传递和方法。 161
10.7 method_missing方法 162
10.8 发送消息 163
10.9 无痛的代理 164
10.10 应用和滥用代理 166
10.11 现实中代理模式的应用 167
10.12 本章回顾 168
第11章 使用装饰器改善你的对象 170
11.1 装饰器:丑陋代码的解药 170
11.2 正式装饰 176
11.3 减轻代理的郁闷 176
11.4 代理器模式的另一种动态方式 177
11.4.1 装饰方法 177
11.5 使用模组来装饰 178
11.6 应用和滥用装饰器模式 178
11.7 现实中的装饰器应用 179
11.8 本章回顾 180
第12章 使用单例来确保仅有一个 181
12.1 一个对象,全局可访 181
12.2 类变量和类方法 181
12.2.1 类变量 181
12.3 类方法 182
12.4 Ruby中的单例应用的第一次尝试 183
12.4.1 管理单个实例 184
12.5 确保只有一个 185
12.6 单例模组 186
12.7 勤性单例和惰性单例 186
12.8 其他单例模式的实现方法 187
12.8.1 使用全局变量作为单例 187
12.9 使用类作为单例 187
12.10 使用模组作为单例 189
12.11 安全带还是拘束衣? 189
12.12 使用和滥用单例模式 190
12.12.1 它们实际上就是全局变量,对不对? 190
12.12.2 你到底需要多少单例? 191
12.12.3 在一个需要知道的基础上的单例 191
12.12.4 减轻测试的郁闷 193
12.13 现实中的单例模式应用 193
12.14 本章回顾 194
第13章 使用工厂模式挑选正确的类 196
13.1 一种不同的鸭子类型 196
13.2 模板方法再露一手 198
13.3 参数化的工作方法 200
13.4 类也就是对象 202
13.5 坏消息:你的程序搞大了 203
13.6 对象创建的组合 204
13.7 再说一次,类就是一种对象 206
13.8 协调名字 207
13.9 使用和滥用工厂模式 208
13.10 现实中的工厂模式的应用 208
13.11 本章回顾 210
第14章 通过生成器来简化对象创建 212
14.1 制造计算机 212
14.2 多态的构造器 215
14.3 构造器能保证产生健全的对象 217
14.4 可重用的构造器 217
14.5 使用魔术方法制作更好的构造器 218
14.6 应用和滥用构造器模式 219
14.7 现实中的构造器模式应用 219
14.8 本章回顾 220
第15章 使用解释器来组建你的系统 222
15.1 用以完成任务的正确语言 222
15.2 构建一个解析器 223
15.3 一个文件查找解析器 224
15.3.1 查找所有文件 224
15.3.2 根据文件夹来查找文件 225
15.3.3 大文件和可写文件 226
15.3.4 加入Not, And和Or的更复杂的检索 227
15.4 创建AST 229
15.4.1 一个简单的分析器 229
15.5 一个没有分析器的解析器? 231
15.6 让XML和YAML来做分析工作? 232
15.6.1 为更复杂的分析器使用Racc 233
15.6.2 让Ruby来做分析? 233
15.7 应用和滥用解析器模式 233
15.8 现实中的解析器模式应用 234
15.9 本章回顾 235
第16章 采用域指定语言来打开你的系统 237
16.1 特定语言的域 237
16.2 一个备份文件的DSL 238
16.3 它是数据文件——不!它是一个程序! 238
16.4 构建PackRat 239
16.5 将我们的DSL合成一体 241
16.6 评估PackRat 241
16.7 改进PackRat 242
16.8 应用和滥用内部DSL 244
16.9 内部DSL在现实中的应用 245
16.10 本章回顾 246
第17章 使用元编程创建自定义对象 248
17.1 通过方法来度身定制的对象和方法 248
17.2 通过模组来自定义对象和模组 250
17.3 凭空招呼出崭新的方法 251
17.4 到对象的内部看看 254
17.5 应用和滥用元编程 255
17.6 现实中的元编程应用 256
17.7 本章回顾 258
第18章 惯例优于配置 260
18.1 一个优秀的用户界面——对于开发者 261
18.1.1 预期需求 261
18.1.2 让他们只说一次 261
18.1.3 提供一个模板 262
18.2 一个消息中转器 262
18.3 选择适配器 264
18.4 载入类 265
18.5 增加一些安全性 267
18.6 帮助用户开始使用 268
18.7 评估消息中转器 269
18.8 应用和滥用惯例优于配置 269
18.9 惯例优于配置在现实中的应用 270
18.10 本章回顾 270
第19章 总结 273
附录 A 得到Ruby 275
在Microsoft Windows上安装Ruby 275
在Linux和其他UNIX风格的系统上安装Ruby 275
Mac OS X 275
附录B 深挖 276
设计模式 276
Ruby 276
正则表达式 277
博客和网站 278
附录C 关键词翻译参照表... 279
Design patterns in Ruby
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×