第一部分 C#面向对象程序设计
第1章 设计模式概述 2
1.1 定义设计模式 3
1.2 学习过程 4
1.3 学习设计模式 4
1.4 关于面向对象方法 4
1.5 C#设计模式 5
1.6 本书的组织结构 5
第2章 C#语言的语法 6
2.1 数据类型 6
2.2 数值与字符串间的转换 7
2.3 声明多个变量 8
2.4 数值型常量 8
2.5 字符常量 8
2.6 变量 8
2.7 用多个等号初始化 9
2.8 一个简单的C#程序 9
2.9 算术运算符 10
2.10 递增运算符和递减运算符 10
2.11 将算术语句和赋值语句合并 11
2.12 C#中的判断 11
2.13 比较运算符 12
2.14 条件合并 12
2.15 最常见的错误 13
2.16 switch语句 13
2.17 C#注释 13
2.18 有争议的三元运算符 14
2.19 C#的循环语句 14
2.20 while循环 14
2.21 do-while语句 14
2.22 for循环 15
2.23 在for循环中用到变量时再声明 15
2.24 for循环语句中的逗号 15
2.25 C#与C的区别 16
2.26 C#与Java的区别 16
2.27 小结 17
第3章 用C#编写Windows程序 18
3.1 C#中的对象 18
3.2 受管语言和垃圾收集 18
3.3 C#中的类和名字空间 18
3.4 构建一个C#应用程序 19
3.5 用C#编写一个最简单的 Windows程序 20
3.6 Windows控件 22
3.7 Windows controls程序 25
3.8 小结 26
3.9 随书附带光盘中的程序 26
第4章 在C#中使用类和对象 27
4.1 关于类 27
4.2 一个简单的温度转换程序 27
4.3 构造一个Temperature类 28
4.4 将判断放在Temperature类里 30
4.5 使用类完成格式化和数值转换工作 31
4.6 分析字符串的类 33
4.7 类与对象 34
4.8 类包含 35
4.9 初始化 36
4.10 类和属性 36
4.11 C#的程序设计风格 38
4.12 代理 38
4.13 索引器 40
4.14 运算符重载 41
4.15 小结 41
4.16 随书附带光盘中的程序 41
第5章 继承 42
5.1 构造函数 42
5.2 C#中的绘图和Graphics 对象 42
5.3 使用继承 44
5.4 名字空间 44
5.5 公有的、私有的和保护的 46
5.6 重载 46
5.7 virtual和override关键字 47
5.8 在派生类里覆盖方法 47
5.9 使用new替换方法 48
5.10 覆盖Windows控件 48
5.11 接口 50
5.12 抽象类 50
5.13 接口和抽象类的比较 52
5.14 小结 53
5.15 随书附带光盘中的程序 53
第6章 UML图 54
6.1 继承 55
6.2 接口 56
6.3 组合 56
6.4 图注 57
6.5 用WithClass绘制UML图 57
6.6 C#项目文件 58
第7章 C#中的数组、文件和异常 59
7.1 数组 59
7.2 集合对象 59
7.3 异常 61
7.4 多个异常 62
7.5 抛出异常 62
7.6 文件处理 62
7.7 文件处理中的异常 63
7.8 检测文件末尾 64
7.9 csFile类 64
7.10 随书附带光盘中的程序 66
第二部分 创建型模式
第8章 简单工厂模式 68
8.1 简单工厂模式如何工作 68
8.2 示例代码 68
8.3 两个派生类 69
8.4 构造简单工厂 69
8.5 数学计算中的工厂模式 71
8.6 小结 73
8.7 思考题 73
8.8 随书附带光盘中的程序 73
第9章 工厂方法模式 74
9.1 Swimmer类 76
9.2 Event类 76
9.3 直接排位 77
9.4 排位程序 77
9.5 其他工厂 78
9.6 何时使用工厂方法 78
9.7 思考题 79
9.8 随书附带光盘中的程序 79
第10章 抽象工厂模式 80
10.1 花园规划工厂 80
10.2 添加更多的类 83
10.3 抽象工厂的效果 84
10.4 思考题 84
10.5 随书附带光盘中的程序 84
第11章 单件模式 85
11.1 使用静态方法创建单件 85
11.2 异常与实例 86
11.3 抛出异常 86
11.4 创建一个类实例 86
11.5 提供一个单件的全局访问点 87
11.6 单件模式的其他效果 87
11.7 随书附带光盘中的程序 87
第12章 生成器模式 88
12.1 一个投资跟踪程序 88
12.2 使用ListBox控件中的Items集合 92
12.3 生成器模式的效果 94
12.4 思考题 95
12.5 随书附带光盘中的程序 95
第13章 原型模式 96
13.1 C#中的克隆 96
13.2 使用原型 96
13.3 克隆类 99
13.4 使用原型模式 101
13.5 原型管理器 105
13.6 原型模式的效果 105
13.7 思考题 105
13.8 随书附带光盘中的程序 105
13.9 创建型模式小结 105
第三部分 结构型模式
第14章 适配器模式 108
14.1 在列表之间移动数据 108
14.2 创建一个适配器 109
14.3 使用DataGrid 110
14.4 使用TreeView 112
14.5 类适配器 113
14.6 双向适配器 115
14.7 C#中对象适配器与类适配器的对比 115
14.8 可插入的适配器 115
14.9 思考题 115
14.10 随书附带光盘中的程序 115
第15章 桥接模式 116
15.1 桥接接口 116
15.2 VisList类 118
15.3 类图 119
15.4 扩展Bridge 119
15.5 Windows窗体充当Bridge 121
15.6 桥接模式的效果 122
15.7 思考题 122
15.8 随书附带光盘中的程序 122
第16章 组合模式 123
16.1 一个组合的实现 123
16.2 计算薪水 124
16.3 Employee类 124
16.4 Boss类 126
16.5 构造Employee树 127
16.6 自我升职 128
16.7 双向链表 128
16.8 组合模式的效果 129
16.9 一个简单的组合 130
16.10 .NET中的组合 130
16.11 其他实现问题 130
16.12 思考题 130
16.13 随书附带光盘中的程序 130
第17章 装饰模式 131
17.1 装饰一个CoolButton 131
17.2 处理Decorator中的事件 132
17.3 多个Decorator 134
17.4 非可视化的Decorator 135
17.5 Decorator,Adapter和Composite 135
17.6 装饰模式的效果 136
17.7 思考题 136
17.8 随书附带光盘中的程序 136
第18章 外观模式 137
18.1 什么是数据库 137
18.2 从数据库中取出数据 138
18.3 数据库的种类 138
18.4 ODBC 139
18.5 数据库的结构 139
18.6 使用ADO.NET 139
18.7 使用ADO.NET向数据库表添加数据行 141
18.8 构建外观模式的各个类 142
18.9 创建ADO.NET的Facade 143
18.10 为每张表创建自己的类 147
18.11 构建Prices表 149
18.12 填写数据库表 151
18.13 最终的应用程序 152
18.14 Facade的构成 152
18.15 Facade的效果 153
18.16 思考题 153
18.17 随书附带光盘中的程序 153
第19章 享元模式 154
19.1 讨论 154
19.2 示例代码 155
19.3 处理鼠标事件和绘图事件 159
19.4 C#中Flyweight的应用 160
19.5 共享对象 160
19.6 Copy-on-Write对象 160
19.7 思考题 160
19.8 随书附带光盘中的程序 160
第20章 代理模式 161
20.1 示例代码 161
20.2 C#中的Proxy 163
20.3 Copy-on-Write 163
20.4 相关模式之间的比较 163
20.5 思考题 163
20.6 随书附带光盘中的程序 163
20.7 结构型模式小结 164
第四部分 行为型模式
第21章 职责链 166
21.1 适用范围 166
21.2 示例代码 167
21.3 列表框 169
21.4 设计一个帮助系统 170
21.5 链的树形结构 173
21.6 请求的种类 174
21.7 C#中的例子 174
21.8 职责链 175
21.9 思考题 175
21.10 随书附带光盘中的程序 175
第22章 命令模式 176
22.1 动机 176
22.2 命令对象 176
22.3 构建Command对象 177
22.4 命令模式的效果 179
22.5 CommandHolder接口 179
22.6 提供Undo操作 181
22.7 思考题 185
22.8 随书附带光盘中的程序 185
第23章 解释器模式 186
23.1 动机 186
23.2 适用性 186
23.3 一个简单的报表例子 186
23.4 解释语言 187
23.5 用于分析的对象 188
23.6 归约分析栈 191
23.7 实现解释器模式 192
23.8 解释器模式的效果 195
23.9 思考题 195
23.10 随书附带光盘中的程序 196
第24章 迭代器模式 197
24.1 动机 197
24.2 迭代器示例代码 197
24.3 过滤迭代器 199
24.4 记录俱乐部 200
24.5 迭代器模式的效果 201
24.6 随书附带光盘中的程序 202
第25章 中介者模式 203
25.1 一个例子 203
25.2 控件间的相互协作 204
25.3 示例代码 204
25.4 Mediator对象与Command对象 207
25.5 中介者模式的效果 207
25.6 单接口的中介者 208
25.7 实现问题 209
25.8 随书附带光盘中的程序 209
第26章 备忘录模式 210
26.1 动机 210
26.2 实现 210
26.3 示例代码 210
26.4 用户界面中的命令对象 215
26.5 处理鼠标事件和Paint事件 216
26.6 备忘录模式的效果 217
26.7 思考题 218
26.8 随书附带光盘中的程序 218
第27章 观察者模式 219
27.1 观察颜色变化 219
27.2 发给观察者的消息 221
27.3 观察者模式的效果 223
27.4 随书附带光盘中的程序 223
第28章 状态模式 224
28.1 示例代码 224
28.2 状态之间的转换 227
28.3 Mediator如何与StateManager互相协作 228
28.4 处理Fill状态 231
28.5 处理Undo列表 231
28.6 VisRectangle类和VisCircle类 233
28.7 Mediator类和“万能类” 235
28.8 状态模式的效果 235
28.9 状态转换 235
28.10 思考题 235
28.11 随书附带光盘中的程序 236
第29章 策略模式 237
29.1 动机 237
29.2 示例代码 237
29.3 Context类 238
29.4 程序中的Command对象 238
29.5 线状图和条形图策略 239
29.6 用C#绘制图形 239
29.7 策略模式的效果 242
29.8 随书附带光盘中的程序 242
第30章 模板方法模式 243
30.1 动机 243
30.2 Template类中的方法种类 244
30.3 示例代码 245
30.4 三角形绘图程序 247
30.5 模板与反向调用 248
30.6 小结与效果 248
30.7 随书附带光盘中的程序 249
第31章 访问者模式 250
31.1 动机 250
31.2 何时使用访问者模式 251
31.3 示例代码 251
31.4 访问类 252
31.5 访问几个类 253
31.6 Boss也是Employee 254
31.7 Visitor的杂物箱操作 255
31.8 双分派 256
31.9 为什么这样做 256
31.10 访问一系列的类 256
31.11 访问者模式的效果 256
31.12 思考题 257
31.13 随书附带光盘中的程序 257
参考文献 258