设计模式

设计模式

基于C#的工程化实现及扩展

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
8.575 评价豆瓣读书
春暖花开季 恰是读书时满500减300、满200减120、满100减60活动详情

作品简介

本书基于C# 2.0的语法,试图将GOF 23中的模式以一种可工程化的公共库而非Example的方式呈现给读者。内容包括以下7部分。

第1篇主要是概括性的介绍;第2篇创建型模式介绍通过将实例化职责委托他方对象的办法,隔离客户程序与具体类型实例化的依赖关系,保证客户程序(或者外部系统)获得期望具体类型实例的、同时不必发生直接的引用;第3篇结构型模式的重点在于如何通过灵活的体系组织不同的对象,并在此基础上完成更为复杂的类型(或者类型系统),而参与组合的各类型之间始终保持尽量松散的结构关系;第4篇行为型模式关注于应用运行过程中算法的提供和通信关系的梳理;第5篇主要介绍小颗粒度基础模式和应用案例;第6篇主要介绍应用全局的模式化的实现方法,包括现在已经被普遍应用的N层模式及某些关键性框架产品采用的“微内核”模式;第7篇主要是一些针对Web和Web Service领域的模式设计技术。

本书主要针对对C#语言和.NET Framework平台有一定了解或有一定应用经验的用户,尤其适于那些希望运用模式技术在设计和开发方面多应对些挑战的用户。

王翔,软件架构师,主要从事.NET、XML、公钥基础设施的开发。专注于数据(尤其是XML信息)的生产、加工、交换、提炼等过程。最近参与了一系列有关应用密码技术和PKI环境保护信息系统数据安全的项目。

最喜欢数学,平常案头总是摆一本数学练习题。闲暇时间喜欢写作,通过发表多种技术文章与国内外同行交流各种数据应用经验。

项目间隙经常到各海滨城市徒步旅行、野外露营、出海航行、极限运动,这几年烹饪也渐渐成为个人主要爱好。

作品目录

  1. 设计模式
  2. 导 读
  3. 第1篇 预备知识——发掘用C#语言进行面向对象化设计的潜力
  4. 第1章 重新研读C#语言
  5. 1.1 说明
  6. 1.2 C# 部分语法内容扩展
  7. 1.2.1 命名空间(Namespace)
  8. 1.2.2 简洁的异步通知机制——委托(Delegate)
  9. 1.2.3 考验你的算法抽象能力——泛型(Generics)
  10. 1.2.4 用作标签的方式扩展对象特性——属性(Attribute)
  11. 1.2.5 用索引器简化的C#类型信息访问
  12. 1.2.6 融入C#语言的迭代机制——迭代器(Iterator)
  13. 1.3 可重载运算符(Overloadable Operators)与转换运算符(Conversion Operators)
  14. 1.3.1 The Day After Someday
  15. 1.3.2 用于有限的状态迭代
  16. 1.3.3 操作集合
  17. 1.3.4 类型的适配
  18. 1.3.5 小结
  19. 1.4 面向插件架构和现场部署的配置系统设计
  20. 1.4.1 认识.NET Framework提供的主要配置实体类
  21. 1.4.2 应用实例
  22. 1.4.3 小结
  23. 1.5 实现依赖注入
  24. 1.5.1 背景介绍
  25. 1.5.2 示例情景
  26. 1.5.3 Constructor注入
  27. 1.5.4 Setter注入
  28. 1.5.5 接口注入
  29. 1.5.6 基于Attribute实现注入——Attributer
  30. 1.5.7 小结
  31. 第2章 开始每个设计模式之前
  32. 2.1 new()的替代品
  33. 2.2 准备一个轻量的内存Cache
  34. 2.3 准备一个集中访问配置文件的Broker
  35. 2.4 Web?Not Web?
  36. 2.5 小结
  37. 第2篇 创建型模式——管理并隔离对象实例的构造过程
  38. 第3章 工厂&工厂方法模式
  39. 3.1 简单工厂
  40. 3.1.1 最简单的工厂类
  41. 3.1.2 根据规格加工产品——参数化工厂
  42. 3.1.3 简单工厂的局限性
  43. 3.2 经典回顾
  44. 3.3 解耦Concrete Factory与客户程序
  45. 3.4 基于配置文件的Factory
  46. 3.5 批量工厂
  47. 3.5.1 开发情景
  48. 3.5.2 定义产品类型容器
  49. 3.5.3 定义批量工厂和产品类型容器
  50. 3.5.4 增设生产指导顾问——Director
  51. 3.5.5 由Director指导的客户程序
  52. 3.6 基于类型参数的Generic Factory
  53. 3.7 委托工厂类型
  54. 3.8 小结
  55. 第4章 单件模式
  56. 4.1 经典回顾
  57. 4.2 线程安全的Singleton
  58. 4.3 细节决定成败
  59. 4.4 细颗粒度Singleton
  60. 4.4.1 背景讨论
  61. 4.4.2 解决桌面应用中细颗粒度Singleton问题
  62. 4.4.3 解决Web应用中细颗粒度Singleton问题
  63. 4.4.4 更通用的细颗粒度Singleton
  64. 4.5 自动更新的Singleton
  65. 4.6 参数化的Singleton
  66. 4.7 跨进程的Singleton
  67. 4.8 Singleton的扩展——Singleton-N
  68. 4.8.1 定义具有执行状态的抽象对象
  69. 4.8.2 定义相应的Singleton-N实例集合
  70. 4.8.3 在基本Singleton模式实现的框架下引入实例集合
  71. 4.9 引入配置文件管理Singleton
  72. 4.10 基于类型参数的Generic Singleton
  73. 4.11 由工厂类型协助Singleton实例管理
  74. 4.12 小结
  75. 第5章 抽象工厂模式
  76. 5.1 经典回顾
  77. 5.2 按计划实施生产
  78. 5.2.1 为抽象工厂补充类型映射器
  79. 5.2.2 处理模式的硬伤
  80. 5.3 定义计划与生产间的映射关系
  81. 5.3.1 分析
  82. 5.3.2 登记映射关系
  83. 5.3.3 用TypeMapper协助工厂生产
  84. 5.3.4 定义实体TypeMapper和实体工厂
  85. 5.3.5 实现装配机制
  86. 5.4 配置生产计划
  87. 5.5 基于Delegate的生产外包
  88. 5.6 小结
  89. 第6章 创建者模式
  90. 6.1 经典回顾
  91. 6.2 异步调用的BuildUp()
  92. 6.3 为Builder打个标签
  93. 6.3.1 完成工具类
  94. 6.4 具有装配/卸裁能力的Builder
  95. 6.5 看着图纸加工——登记配置文件
  96. 6.5.1 把UML的对象变成XSD
  97. 6.5.2 把握梗概——删除不经常变化的内容
  98. 6.5.3 映射为配置节点或配置元素
  99. 6.5.4 实现实体对象
  100. 6.5.5 完成流水线生产
  101. 6.6 用迭代器控制流水线
  102. 6.7 小结
  103. 第7章 原型模式
  104. 7.1 经典回顾
  105. 7.2 表面模仿还是深入模仿
  106. 7.2.1 概念
  107. 7.2.2 制作实现克隆的工具类型
  108. 7.2.3 克隆也要稍微保留点个性
  109. 7.2.4 定制并管理的克隆过程
  110. 7.3 重新定义原型方法
  111. 7.4 同时支持XML和二进制序列化的泛型集合类型处理
  112. 7.5 小结
  113. 第3篇 结构型模式——针对变化组织灵活的对象体系
  114. 第8章 适配器模式
  115. 8.1 说明
  116. 8.2 经典回顾
  117. 8.3 进一步扩展适配范围的组适配器
  118. 8.4 Adapter——Adapter互联模式
  119. 8.4.1 分析
  120. 8.4.2 方式1:客户程序直接调度Adapter
  121. 8.4.3 方式2:基于标准约定调度Adapter
  122. 8.4.4 方式3:借助反射和约定完成异步调用
  123. 8.5 用配置约定适配过程
  124. 8.6 XML数据的专用适配机制
  125. 8.7 小结
  126. 第9章 桥模式
  127. 9.1 说明
  128. 9.2 经典回顾
  129. 9.3 将复杂性进一步分解后的多级桥关系
  130. 9.4 看着“图纸”造桥
  131. 9.5 具有约束关系的桥
  132. 9.6 小结
  133. 第10章 组合模式
  134. 10.1 说明
  135. 10.2 经典回顾
  136. 10.3 用迭代器遍历组合类型
  137. 10.4 适于XML信息的组合模式
  138. 10.5 小结
  139. 第11章 装饰模式
  140. 11.1 说明
  141. 11.2 经典回顾
  142. 11.3 具有自我更新特征的装饰模式
  143. 11.3.1 分析
  144. 11.3.2 抽象装饰接口
  145. 11.3.3 抽象状态接口
  146. 11.3.4 依据当前状态修改装饰
  147. 11.3.5 测试验证
  148. 11.4 设计Decorator与Builder协作的产物
  149. 11.5 把Decorator做成标签
  150. 11.5.1 更“彻底”的Attribute注入
  151. 11.5.2 方式1:采用.NET平台自带的AOP机制实现
  152. 11.5.3 方式2:自定义代理拦截框架方式
  153. 11.5.4 进一步分析
  154. 11.6 小结
  155. 第12章 外观模式
  156. 12.1 说明
  157. 12.2 经典回顾
  158. 12.3 Facade接口
  159. 12.4 Remote Facade
  160. 12.5 面向性能考虑的升级版Remote Facade——Data Transfer Object模式
  161. 12.6 平台、开发语言无关的抽象Facade接口——WSDL
  162. 12.7 让使用者更加方便的Fluent Interface设计
  163. 12.8 小结
  164. 第13章 享元模式
  165. 13.1 说明
  166. 13.2 经典回顾
  167. 13.3 制订共享计划
  168. 13.4 综合性的共享体系——Object Pool
  169. 13.4.1 应用背景
  170. 13.4.2 总体技术结构
  171. 13.4.3 抽象类型实体设计
  172. 13.4.4 享元模式的典型应用——缓冲
  173. 13.4.5 示例
  174. 13.5 用于并行处理的线程级享元
  175. 13.6 通过Delegate和队列实现异步Flyweight
  176. 13.7 小结
  177. 第14章 代理模式
  178. 14.1 说明
  179. 14.2 经典回顾
  180. 14.3 远程访问代理
  181. 14.3.1 第1步:定义远程访问的服务协议
  182. 14.3.2 第2步:定义服务端的配置文件及相应的宿主程序
  183. 14.3.3 第3步:生成客户端远程代理(Proxy)类型
  184. 14.3.4 第4步:编写客户端程序
  185. 14.4 数据访问代理
  186. 14.5 对象缓存代理
  187. 14.6 为代理过程增加预处理和后续处理的支持
  188. 14.6.1 第1步:定义外部处理机制的抽象结构
  189. 14.6.2 第2步:定义新增处理的配置信息
  190. 14.6.3 第3步:定义配置解析对象
  191. 14.6.4 第4步:修正服务端和代理类的处理过程
  192. 14.7 小结
  193. 第4篇 行为型模式——算法、控制流和通信关系的对象化处理
  194. 第15章 职责链模式
  195. 15.1 说明
  196. 15.2 经典回顾
  197. 15.3 用断点控制链式过程
  198. 15.4 链式反应
  199. 15.5 增加配置约束
  200. 15.6 小结
  201. 第16章 模板方法模式
  202. 16.1 说明
  203. 16.2 经典回顾
  204. 16.3 满足多套模板要求
  205. 16.4 方法的模板——Delegate
  206. 16.5 类型的模板——Generic
  207. 16.6 用配置勾勒的模板
  208. 16.7 小结
  209. 第17章 解释器模式
  210. 17.1 说明
  211. 17.2 经典回顾
  212. 17.3 采用正则表达式
  213. 17.4 采用字典
  214. 17.5 采用XSD
  215. 17.6 用XSD解释定制的业务语言
  216. 17.7 小结
  217. 第18章 命令模式
  218. 18.1 说明
  219. 18.2 经典回顾
  220. 18.3 轻量级的Command——委托
  221. 18.4 异步Command
  222. 18.5 把Command打包
  223. 18.5.1 外观模式方式
  224. 18.5.2 组合模式方式
  225. 18.6 把Command排队
  226. 18.7 小结
  227. 第19章 迭代器模式
  228. 19.1 说明
  229. 19.2 经典回顾
  230. 19.3 C#化的Iterator
  231. 19.4 小结
  232. 第20章 中介者模式
  233. 20.1 说明
  234. 20.2 经典回顾
  235. 20.3 基于Delegate和事件的松耦合Mediator
  236. 20.4 根据配置动态协调通知关系
  237. 20.5 SOAP Mediator
  238. 20.6 小结
  239. 第21章 备忘录模式
  240. 21.1 说明
  241. 21.2 经典回顾
  242. 21.3 把备忘压栈
  243. 21.4 Memento的序列化和持久化
  244. 21.5 小结
  245. 第22章 观察者模式
  246. 22.1 说明
  247. 22.2 经典回顾
  248. 22.3 .NET内置的Observer机制——事件
  249. 22.4 具有Observer的集合类型
  250. 22.5 面向服务接口的Observer
  251. 22.6 小结
  252. 第23章 状态模式
  253. 23.1 说明
  254. 23.2 经典回顾
  255. 23.3 State的序列化和持久化
  256. 23.4 主动方式State
  257. 23.5 触发式State
  258. 23.6 涉及用户交互的状态流转
  259. 23.7 用WF完成更易于编排的State
  260. 23.8 小结
  261. 第24章 策略模式
  262. 24.1 说明
  263. 24.2 经典回顾
  264. 24.3 Strategy与Interpreter协作
  265. 24.4 充分利用.NET Framework自带的Strategy接口
  266. 24.5 动态策略
  267. 24.6 小结
  268. 第25章 访问者模式
  269. 25.1 说明
  270. 25.2 经典回顾
  271. 25.3 借助反射实现Visitor
  272. 25.4 用委托使引用关系更加松散
  273. 25.5 小结
  274. 第5篇 小颗粒度基础模式和应用案例——服务于细节的基础性模式
  275. 第26章 成 例
  276. 26.1 说明
  277. 26.2 Partial Class
  278. 26.2.1 体现组合关系
  279. 26.2.2 从多个侧面刻画类型
  280. 26.2.3 与Visual Studio Add-ins的结合
  281. 26.2.4 小结
  282. 26.3 Gateway
  283. 26.3.1 封装本地API的Gateway
  284. 26.3.2 封装非C#语言访问接口
  285. 26.3.3 封装通用操作方法
  286. 26.3.4 小结
  287. 26.4 Mapper
  288. 26.4.1 介绍
  289. 26.4.2 数据对象映射器
  290. 26.4.3 小结
  291. 26.5 Registry
  292. 26.6 Value Object
  293. 26.7 通用数据载体DataSet和DataTable
  294. 26.8 Context
  295. 第27章 GOF总结及应用案例
  296. 27.1 GOF总结
  297. 27.1.1 回顾GOF
  298. 27.2 应用案例需求说明
  299. 27.3 发现和分析
  300. 27.4 模式应用
  301. 27.4.1 已经采用的模式
  302. 27.4.2 如何实现与具体数据源无关
  303. 27.4.3 提供执行前后定制处理的能力
  304. 27.4.4 设计一个结构更加灵活的连接串配置访问机制
  305. 27.5 小结
  306. 第6篇 部分架构模式——面向应用全局的模式化处理
  307. 第28章 MVC模式
  308. 28.1 说明
  309. 28.2 模式介绍
  310. 28.3 示例
  311. 28.3.1 混合方式
  312. 28.3.2 分解对象职责
  313. 28.3.3 主动方式M/V/C
  314. 28.4 小结
  315. 第29章 管道—过滤器模式
  316. 29.1 说明
  317. 29.2 登机的管道流程
  318. 29.2.1 数据源发起的推方式
  319. 29.2.2 数据接收方发起的拉方式
  320. 29.2.3 中介对象发起的推拉混合方式
  321. 29.2.4 数据源/数据接收方分别发起的衔接方式
  322. 29.3 示例
  323. 29.3.1 推方式示例
  324. 29.3.2 增加主动方式的Filter
  325. 29.4 小结
  326. 第30章 出版—预订模式
  327. 30.1 说明
  328. 30.2 生活中无处不在的“预订”
  329. 30.2.1 面向单一主题的本地观察者模式
  330. 30.2.2 增加Proxy实现面向单一主题的分布式观察者模式
  331. 30.2.3 用出版者集中管理预订
  332. 30.2.4 面向物理环境设计更多出版预订模式
  333. 30.3 示例
  334. 30.3.1 数据实体模型部分
  335. 30.3.2 业务实体模型部分
  336. 30.3.3 具体实体对象部分
  337. 30.3.4 单元测试
  338. 30.4 小结
  339. 第31章 Broker模式
  340. 31.1 说明
  341. 31.2 越来越庞杂的分布式系统交互之感
  342. 31.3 示例
  343. 31.4 小结
  344. 第32章 消息总线模式
  345. 32.1 说明
  346. 32.2 用总线梳理企业系统环境
  347. 32.2.1 分隔区域条件下的消息总线
  348. 32.3 小结
  349. 第7篇 部分Web和Web Service模式——面向服务开发中的模式化处理
  350. 第33章 页面控制器模式
  351. 33.1 说明
  352. 33.2 用对象化思维抽象和扩展页面操作逻辑
  353. 33.3 示例
  354. 33.4 小结
  355. 第34章 实现Web服务依赖倒置
  356. 34.1 Web Service的模式化特征
  357. 34.2 第一层的包装
  358. 34.2.1 Aggregation
  359. 34.2.2 Contain
  360. 34.3 SOA环境下典型的Web Service开发方式
  361. 34.4 依赖倒置原则及其在Web Service中的应用
  362. 34.4.1 分析
  363. 34.4.2 实现示例
  364. 34.5 基于WCF的工程化实现
  365. 34.5.1 实现示例
  366. 34.5.2 借助WCF扩展服务的对象化特征
  367. 34.6 小结
  368. 第35章 Web服务适配器模式
  369. 35.1 说明
  370. 35.2 Web Service下的接口适配问题
  371. 35.2.1 常规情景分析
  372. 35.2.2 Web Service间连续交互适配
  373. 35.2.3 实施方式
  374. 35.3 采用标准Web Service类型的示例
  375. 35.3.1 单纯数据XSD适配
  376. 35.3.2 服务方法兼容性适配
  377. 35.3.3 其他说明
  378. 35.4 采用WCF的示例
  379. 35.4.1 用Data Contract定义数据Schema
  380. 35.4.2 定义不同的类型转换方式示例
  381. 35.5 小结
  382. 第36章Web服务数据传输对象模式
  383. 36.1 说明
  384. 36.2 Web Service接口批量交互中的性能问题
  385. 36.2.1 DTO对象
  386. 36.2.2 DTO与消费者服务的对应关系
  387. 36.2.3 部署设计考虑
  388. 36.2.4 结构
  389. 36.3 示例
  390. 36.3.1 没有DTO对象的情况
  391. 36.3.2 增加DTO对象的情况
  392. 36.4 小结
  393. 36.5 附件
  394. 36.5.1 实现DTO数据装载的两种方式
  395. 第37章 Web服务事件监控器模式
  396. 37.1 说明
  397. 37.2 如何为普通Web Service封装事件机制
  398. 37.3 示例
  399. 37.4 小结
  400. 第38章 Web服务拦截过滤器模式
  401. 38.1 说明
  402. 38.2 通过拦截完成自定义特性的透明扩展
  403. 38.2.1 实现方式
  404. 38.2.2 .NET平台的实现技术
  405. 38.3 示例
  406. 38.3.1 基于ASP.NET Web Service的IHttpModule方式
  407. 38.3.2 基于WCF自定义拦截方式
  408. 38.4 小结
  409. 附录A 面向关系数据和XML数据的领域逻辑模式
  410. A.1 说明
  411. A.2 实现业务领域逻辑的主要方法
  412. A.2.1 整体逻辑结构
  413. A.2.2 性能改进
  414. A.2.3 面向关系数据库的业务服务设计
  415. A.2.4 面向XML数据的扩展设计
  416. A.2.5 配置机制设计
  417. A.3 示例
  418. A.3.1 示例情景
  419. A.3.2 测试内容准备
  420. A.3.3 实际测试过程
  421. A.4 小结
  422. 附录B 基于XML的应用建模
  423. B.1 说明
  424. B.2 世界是平的,但更是多元的
  425. B.2.1 更具扩展性的数据模型——XML
  426. B.2.2 让非结构化数据可以被识别
  427. B.2.3 应对数据和内容的集成
  428. B.2.4 新的应用扩展
  429. B.2.5 应对语义网络的复杂性
  430. B.3 小结
载入中

大家都喜欢