软件开发越来越复杂,对软件设计的要求也越来越高,而软件设计和架构的入门功夫就是深入理解和掌握设计模式,因此,设计模式的重要性不言而喻。
很多朋友也认识到了设计模式的重要性,也看了很多的书籍和资料,但是,常听到他们这样的抱怨:“设计模式的书我看了不少,觉得都看懂了,就是不知道在实际开发中怎么用这些设计模式”,从而认为设计模式是“看上去很美的花拳绣腿”。
其实不然,造成这种情况的原因就在于:这些朋友对设计模式的理解不到位,自己感觉懂了,其实还差很远,并不是“真正”理解和掌握了设计模式。
市面上也有不少的设计模式方面的书籍,但对一般的学习者而言,要么就是太深,看得云里雾里的,比如GoF的著作《设计模式——可复用面向对象软件的基础》,很经典,但是能吃透的人少;要么就是太浅,看了跟没看差不多,也就是介绍一下每个设计模式,告诉你这就是某某设计模式,虽然语言很生动但是实在没货,看完也不知道怎么用,就像是带领大家摸到了设计模式的大门口,却不告诉你怎么进去一样,其根本原因还是讲得太浅,跟实际的应用有太大的差距。
对于所有想要真正理解和掌握设计模式的朋友,其实需要这样的书籍:
u 理论全面、准确,难度适中
u 讲解深入浅出、浅显易懂
u 理论联系实际应用,对于晦涩的理论,应有相应的示例
u 示例最好来自实际应用,而不是来自虚拟的场景
u 示例最好相对完整,而不是片断代码,以利于学习和应用
这也是本书写作的目的,希望能够帮助更多的朋友早日修成设计模式的正果。
经过多年的准备和一年的写作,以及各层次读者的多轮试读意见和建议汇总,最终成书,我们可以这样说:这是一本诚意十足的书,敬请您的评鉴!
本书的试读人员包括:从还没有参加工作的学生,一直到工作7年的人员;职务覆盖普通的程序员、项目经理、高级系统架构师、技术部的经理;两位作者本身从事开发工作的年限,一位超过10年,一位超过5年。
试读的结果:工作经验在1年以下的朋友,能正常理解和掌握初级部分的内容,能部分理解中高级部分的内容;工作经验在1-2年的朋友,基本上能全面理解,但是领悟尚有不足;工作经验在2-5年的朋友,能够正常理解和掌握,基本达到本书写作的意图;工作经验在5年以上的朋友,主要是弥补以前较少用到的部分,使知识更加系统化和全面化,另外把本书当作一本工具参考书,案头必备。
本书内容 本书完整覆盖GoF的著作《设计模式——可复用面向对象软件的基础》一书所讲述的23个设计模式。
Ø 初级内容:从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等等,让读者能系统、完整、准确的掌握每个模式,培养正确的“设计观”
Ø 中高级内容:深入探讨如何理解这些模式,模式中蕴含什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点,和其它模式的关系等等,以期让读者尽量去理解和掌握每个设计模式的精髓所在
本书在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻的理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本书。
本书特色
Ø 本书有很多独到的见解和精辟的总结,能写出一些人所不敢写、人所不能写的内容,是一本“真正有货”的书
Ø 本书大部分示例程序都来自真实的项目应用,让你真正理解和掌握设计模式,尽量做到“从实际项目中来,再应用回到实际项目中去”
本书涉及的实际应用,包含但不限于:
u 代码生成的应用工具(独立应用)
u 日志管理平台(来自于基础平台)
u 缓存管理(来自于基础平台)
u 订单处理(来自于CRM系统)
u 导出数据的应用框架(来自于SCM)
u 组织机构管理(来自于基础平台)
u 大数据量访问(很多系统都有)
u 水质监测系统(独立应用)
u 工资管理(来自于HRM系统)
u 商品管理(来自于电子商务系统)
u 登录控制(来自于OA系统)
u 报价管理(来自于CRM系统)
u 在线投票系统(来自于OA系统)
u 仿真系统(来自于WorkFlow系统)
u 权限管理(来自于基础平台)
u 配置文件管理(来自于基础平台)
u 奖金核算系统(来自于HRM系统)
u 费用报销管理(来自于OA系统)
u 客户管理(来自于CRM系统)
u 如何实现可配置
u 如何实现同时支持数据库和文件存储的日志管理
u 如何实现缓存以及缓存的管理
u 如何实现用缓存来控制多实例的创建
u 如何处理平行功能
u 如何实现参数化工厂
u 如何应用工厂实现DAO
u 如何实现可扩展工厂
u 如何实现原型管理器
u 如何实现Java的静态代理和动态代理
u 如何实现多线程处理队列请求
u 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求
u 如何实现双向迭代
u 如何实现带策略的迭代器
u 如何实现翻页迭代
u 如何实现树状结构和父组件引用
u 如何检测环状结构
u 如何实现通用的增删改查
u 如何实现容错恢复机制
u 如何模拟工作流来处理流程
u 如何实现对象实例池
u 如何实现自定义语言的解析
u 如何实现简单又通用的XML读取
u 如何实现功能链,实现类似于Web开发中Filter的功能
u 如何实现模拟AOP的功能
u 如何为系统加入权限控制
u 如何自定义I/O装饰器
u 如何实现通用请求处理框架