第1部分 面向对象的C#编程 2
第1章 什么是设计模式 2
1.1 定义设计模式 4
1.2 学习进程 5
1.3 学习设计模式 6
1.4 关于面向对象方法的说明 6
1.5 C#设计模式 7
1.6 本书的内容组织 7
第2章 C#语法 9
2.1 数据类型 10
2.2 数值与串之间的转换 12
2.3 声明多个变量 12
2.4 数值常量 13
2.5 字符常量 13
2.6 变量 14
2.7 用于初始化的连等号 14
2.8 一个简单的C#程序 15
2.9 算术运算符 16
2.10 递增和递减运算符 17
2.11 合并运算语句和赋值语句 17
2.12 C#中的判断 18
2.13 比较运算符 20
2.14 组合条件 20
2.15 最常见的错误 21
2.16 switch语句 21
2.17 C#的注释 22
2.18 有争议的三元运算符 23
2.19 C#中的循环语句 23
2.20 while循环 23
2.21 do-while语句 24
2.22 for循环 24
2.23 在for循环中根据需要声明变量 25
2.24 for循环语句中的逗号 25
2.25 C#与C的不同之处 26
2.26 C#与Java的不同之处 26
2.27 小结 27
第3章 编写C#版的Windows程序 28
3.1 C#中的对象 28
3.2 受管语言和垃圾收集 29
3.3 C#中的类和命名空间 29
3.4 构建C#应用 30
3.5 用C#编写的最简单的窗口程序 31
3.6 Windows控件 34
3.6.1 标签(Label) 35
3.6.2 文本框(TextBox) 35
3.6.3 复选框(CheckBox) 36
3.6.4 按钮(Button) 36
3.6.5 单选按钮(Radio Button) 36
3.6.6 列表框(ListBox)和组合框(ComboBox) 37
3.6.7 项目集合(Item Collection) 37
3.6.8 菜单(Menu) 38
3.6.9 工具提示(ToolTip) 38
3.7 Windows控件程序 39
3.8 小结 41
3.9 配套光盘上的程序 41
第4章 在C#中使用类和对象 42
4.1 使用类的用意所在 42
4.2 一个简单的温度转换程序 42
4.3 构建一个Temperature类 44
4.4 把判断放入到Temperature类中 46
4.5 使用格式化类和值转换类 48
4.6 串的分词器类 50
4.7 作为对象的类 52
4.8 类包含 54
4.9 初始化 55
4.10 类和属性 55
4.11 C#编程风格 58
4.12 委派 58
4.13 索引器 61
4.14 运算符重载 62
4.15 小结 63
4.16 配套光盘上的程序 63
第5章 继承 64
5.1 构造函数 64
5.2 C#中的绘图和图形 65
5.3 使用继承 67
5.4 命名空间 68
5.5 公有的、私有的和受保护的 70
5.6 重载 71
5.7 virtual和override关键字 72
5.8 在派生类中重写方法 72
5.9 使用new关键字来替换方法 73
5.10 重写Windows控件 74
5.11 接口 75
5.12 抽象类 76
5.13 比较接口和抽象类 79
5.14 小结 80
5.15 配套光盘上的程序 80
第6章 UML图 81
6.1 继承 82
6.2 接口 84
6.3 组合 84
6.4 注解 85
6.5 WithClass的UML图 86
6.6 C#工程文件 86
第7章 C#中的数组、文件和异常 87
7.1 数组 87
7.2 集合对象 88
7.2.1 ArrayList 88
7.2.2 Hashtable 89
7.2.3 SortedList 90
7.3 异常 90
7.4 多重异常 92
7.5 抛出异常 92
7.6 文件处理 93
7.6.1 File对象 93
7.6.2 读取文本文件 94
7.6.3 写入文本文件 94
7.7 文件处理中的异常 94
7.8 检测文件结束 95
7.9 一个csFile类 96
7.10 配套光盘上的程序 98
第2部分 创建型模式 101
第8章 简单工厂模式 101
8.1 简单工厂是如何工作的 101
8.2 示例代码 102
8.3 两个派生类 103
8.4 构建简单工厂 104
8.5 数学计算中的工厂模式 106
8.6 小结 108
8.7 思考问题 109
8.8 配套光盘上的程序 109
第9章 工厂方法 110
9.1 Swimmer类 113
9.2 Event类 113
9.3 StraightSeeding类 114
9.4 我们的排位程序 115
9.5 其他工厂类 116
9.6 什么时候使用工厂方法 117
9.7 思考问题 117
9.8 配套光盘上的程序 117
第10章 抽象工厂模式 118
10.1 GarderMaker工厂 118
10.1.1 图像框 121
10.1.2 处理单选按钮和按钮的事件 122
10.2 增加更多的类 123
10.3 抽象工厂的效果 123
10.4 思考问题 124
10.5 配套光盘上的程序 124
第11章 单件模式 125
11.1 使用静态方法来创建单件 125
11.2 异常和实例 126
11.3 抛出异常 127
11.4 创建类的一个实例 127
11.5 提供到单件的全局访问点 128
11.6 返回同一个实例 129
11.7 单件模式的其他效果 130
11.8 配套光盘上的程序 130
第12章 生成器模式 131
12.1 一个投资追踪器 132
12.1.1 股票工厂 134
12.1.2 CheckChoice类 135
12.1.3 ListboxChoice类 136
12.2 在列表框控件中使用项目集合 138
12.2.1 制作数据图表 139
12.2.2 最终得到的选择方式 139
12.3 生成器模式的效果 140
12.4 思考问题 141
12.5 配套光盘上的程序 141
第13章 原型模式 142
13.1 C#中的克隆 143
13.2 使用原型 143
13.3 克隆类 148
13.4 使用原型模式 150
13.5 原型管理器 155
13.6 原型模式的效果 155
13.7 思考问题 156
13.8 配套光盘上的程序 156
13.9 创建型模式小结 157
第3部分 结构型模式 160
第14章 适配器模式 160
14.1 在列表之间移动数据 160
14.2 构造一个适配器 162
14.3 使用DataGrid 164
14.4 使用TreeView 167
14.5 类适配器 168
14.6 双向适配器 170
14.7 C#中对象适配器和类适配器的对比 170
14.8 可插式适配器 171
14.9 思考问题 171
14.10 配套光盘上的程序 171
第15章 桥接模式 172
15.1 Bridger接口 173
15.2 VisList类 175
15.3 类图 176
15.4 对桥接的扩展 177
15.5 用作桥接的Windows窗体 180
15.6 桥接模式的效果 181
15.7 思考问题 181
15.8 配套光盘上的程序 181
第16章 组合模式 182
16.1 组合的一个实现 183
16.2 计算工资 184
16.3 Employee类 184
16.4 Boss类 186
16.5 构建雇员的树形组织结构 188
16.6 自我提升 190
16.7 双向链表 191
16.8 组合模式的效果 192
16.9 简单组合 192
16.10 .NET中的组合 193
16.11 其他的实现问题 193
16.12 思考问题 194
16.13 配套光盘上的程序 194
第17章 装饰器模式 195
17.1 装饰Cool Button 195
17.2 在装饰器中处理事件 197
17.2.1 布局考虑 198
17.2.2 控件的大小和位置 198
17.3 多个装饰器 199
17.4 非可视化的装饰器 202
17.5 装饰器、适配器和组合 202
17.6 装饰器模式的效果 202
17.7 思考问题 203
17.8 配套光盘上的程序 203
第18章 外观模式 204
18.1 什么是数据库 204
18.2 从数据库中提取数据 206
18.3 各种数据库 207
18.4 ODBC 208
18.5 数据库结构 208
18.6 使用ADO.NET 209
18.6.1 连接数据库 209
18.6.2 从数据库表中读取数据 210
18.6.3 执行查询 211
18.6.4 删除表的内容 211
18.7 使用ADO.NET将行添加到数据库表中 212
18.8 构建外观类 213
18.9 构造ADO.NET的外观 215
18.10 为每张表创建类 220
18.11 构建Price表 223
18.12 加载数据库表 227
18.13 最终的应用程序 228
18.14 哪些类构成了外观 229
18.15 外观的效果 230
18.16 思考问题 230
18.17 配套光盘上的程序 230
第19章 享元模式 231
19.1 讨论 232
19.2 示例代码 232
19.2.1 类图 236
19.2.2 选择文件夹 237
19.3 处理鼠标和绘图事件 239
19.4 享元在C#中的应用 240
19.5 可共享的对象 240
19.6 写复制(Copy-on-Write)对象 241
19.7 思考问题 241
19.8 配套光盘上的程序 241
第20章 代理模式 242
20.1 示例代码 243
20.2 C#中的代理 245
20.3 写复制(Copy-on-Write) 246
20.4 与相关模式的比较 246
20.5 思考问题 246
20.6 配套光盘上的程序 246
20.7 结构型模式小结 247
第4部分 行为型模式 249
第21章 职责链 249
21.1 适用性 250
21.2 示例代码 251
21.3 列表框 254
21.4 编写帮助系统程序 256
21.5 链抑或树 260
21.6 各种各样的请求 261
21.7 C#中的例子 262
21.8 职责链 262
21.9 思考问题 263
21.10 配套光盘上的程序 263
第22章 命令模式 264
22.1 动机 264
22.2 命令对象 265
22.3 构建命令对象 266
22.4 命令模式的效果 268
22.5 CommandHolder接口 268
22.6 提供撤销操作 272
22.7 思考问题 278
22.8 配套光盘上的程序 278
第23章 解释器模式 279
23.1 动机 279
23.2 适用性 280
23.3 一个简单的报表例子 280
23.4 解释语言 282
23.5 用在解析中的对象 283
23.6 归约解析栈 287
23.7 实现解释器模式 288
23.8 解释器模式的效果 292
23.9 思考问题 293
23.10 配套光盘上的程序 293
第24章 迭代器模式 294
24.1 动机 294
24.2 迭代器示例代码 295
24.3 过滤型迭代器 297
24.4 记录所属俱乐部 300
24.5 迭代器模式的效果 301
24.6 配套光盘上的程序 302
第25章 中介者模式 303
25.1 一个示例系统 303
25.2 控件之间的交互 304
25.3 示例代码 306
25.4 中介者和命令对象 310
25.5 中介者模式的效果 311
25.6 单一接口的中介者 311
25.7 实现问题 312
25.8 配套光盘上的程序 312
第26章 备忘录模式 313
26.1 动机 313
26.2 实现 314
26.3 示例代码 314
26.4 用户界面中的命令对象 321
26.5 处理鼠标和绘图事件 323
26.6 备忘录的效果 324
26.7 思考问题 325
26.8 配套光盘上的程序 325
第27章 观察者模式 326
27.1 监视颜色的改变 327
27.2 发送给传播者的消息 331
27.3 观察者模式的效果 331
27.4 配套光盘上的程序 332
第28章 状态模式 333
28.1 示例代码 333
28.2 在状态之间切换 338
28.3 Mediator如何与StateManager交互 339
28.4 处理Fill状态 343
28.5 处理撤销列表 344
28.6 VisRectangle类和VisCircle类 347
28.7 中介者和万能类 349
28.8 状态模式的效果 350
28.9 状态转换 350
28.10 思考问题 351
28.11 配套光盘上的程序 351
第29章 策略模式 352
29.1 动机 352
29.2 示例代码 353
29.3 Context 354
29.4 程序的命令 355
29.5 线状图和柱状图策略 355
29.6 用C#绘制图表 356
29.6.1 制作柱状图 357
29.6.2 制作线状图 357
29.7 策略模式的效果 359
29.8 配套光盘上的程序 359
第30章 模板方法模式 360
30.1 动机 360
30.2 模板类中的各种方法 362
30.3 示例代码 363
30.3.1 绘制普通三角形 365
30.3.2 绘制等腰三角形 365
30.4 三角形绘制程序 366
30.5 模板和回调 368
30.6 效果小结 368
30.7 配套光盘上的程序 369
第31章 访问者模式 370
31.1 动机 370
31.2 何时使用访问者模式 372
31.3 示例代码 372
31.4 访问类 374
31.5 访问多种类型的类 374
31.6 上司也是雇员 376
31.7 访问者的全包式操作 377
31.8 双重分派 378
31.9 我们为什么这样做 379
31.10 遍历一系列的类 379
31.11 访问者模式的效果 379
31.12 思考问题 380
31.13 配套光盘上的程序 380