课程目录:软件设计模式佳实战培训
4401 人关注
(78637/99817)
课程大纲:

  软件设计模式佳实战培训

 

 

第一单元 优秀系统与不佳系统的辨析——设计模式初探
内容一:什么是优秀的设计的设计
1. 什么是好的软件设计和衡量的手段
2. 可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标
3. 灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标
4. 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标
5. 如何写出简练,易于理解,模块化,层次性,设计良好,高效,优雅,并且清晰的系统。
6. 劣质代码有什么特征
7. 劣质代码的代价
8. 设计模式在构建优秀系统及避免不佳设计中的用途。
9. 分析真实项目,如何做的详细设计,给我们哪些启示,我们可以学习到什么
10. 分析我们在项目之中是那些原因导致了没有实现这些目标.
内容二:案例 11. 某档案移交接收系统:纷繁复杂的嵌套判断
12. 某多媒体制作软件:上传-下载模块
13. 案例涉及,需要详细学习如下设计模式及原则:
14. 简单工厂、单例、策略模式
15. 重点:如何组织自己的代码和模块:指令与查询分离原则。
16. 对有多年编程经验的人员,函数级的编码是小儿科?
17. 分析模式使用前和后的对比
第二单元 设计模式与面向对象设计原则
内容一:面向对象设计原则与设计模式关系
1. 软件设计目标,基本原则和模式关系
2. 开闭原则
3. 依赖倒置原则
4. 单一职责原则
5. 里氏替换原则
6. 合成/聚合复用原则
7. 接口隔离原则和Demeter法则
8. 通过案例进行分析,模式如何使用
内容二:案例分析—OO基本原则与设计模式
1. 通过经典面向对象案例,要求学员分别使用过程式和面向对象
2种思维,进行设计
2. 进行对比2种思维的不同点和结果
3. 学员通过案例指出OO是否真正做到了它所说的价值
4. 这些小案例涉及项目开发中的常见的困境、疑惑,本节探讨如何通过设计原则解决。
5. 讨论设计原则与设计模式的关系,已经在没有合适模式可用的情况下如何分析、解决问题。涉及如下模式:
a) Façade b) 观察者模式与表驱动法
c) Bridge模式
d) Template Method模式
e) Strategy模式
第三单元 系统/模块中的接口设计,及对外暴露服务技巧——组织接口型模式
内容一:内存接口及Web接口的设计及讨论
1. 接口分离原则
2. 面向对象的要点
3. 系统交互时,松散耦合的设计要点
4. 无状态在接口设计中的重要性,及设计实践
5. 接口的粒度
6. 接口调用次数与粒度的折中
7. 接口版本的设计
8. 新旧接口的兼容性设计技巧——只增不改、灵活参数等
内容二:组织接口型模式
1. 适配器模式。Adapter a) 适配器模式介绍。
b) 容易被忽略的情况:关于接口的修改。
c) 适配器总结。 例:文件解析器系统的接口设计。
2. 外观模式。
a) 令人望而生畏的API函数。
b) 外观模式的作用。
c) 容易被忽略的外观。
d) 外观模式与适配器的辨析。 例:文件解析器系统的外观设计。
3. 中介者模式
a) 中介者模式的使用场景。
b) 中介者模式在架构中的重要地位。
c) 中介者模式与控制者。
第四单元 如何在系统及框架中创建并管理对象/
模块? ——创建型模式
内容一:对象及模块创建的管理
1. 对象创建与IOC模式
2. 框架设计中的对象管理——SpringBean分析
3. 在分层架构中,对象创建的要点
内容二:创建型模式
1. 单例模式。
a) 单例模式的意义。
b) 多线程中的问题。
例:引入单例模式。
2. 工厂模式
a) 工厂模式的使用场景。
b) 工厂模式与反射。
例:引入工厂模式。
3. 抽象工厂模式
a) 创建不同对象的多个系列产品。
b) 工厂模式与抽象工厂模式的区别。
例:引入抽象工厂模式。
4. 构造者模式
a) 构造者模式的应用场景。
b) 构造者模式中的控制者。
5. 原型模式
a) 作为工厂的原型
b) 利用克隆进行原型
第五单元 如何设计出高可扩展性的系统!——扩展型模式
内容一:如何应对需求的变化 —— 打造高可扩展性的系统!
1. 从技术的角度,如何应对需求的变化?
2. 高可扩展性系统的特点及达成方式的变迁
3. 框架设计的常用方法
4. 如何平衡精巧系统的设计和开发成本的投入?
5. 不要生硬地套用模式 —— 桥接模式的灵活使用
内容二:扩展型模式
6. 功能与逻辑的关系
a) 功能模块的设计要点。
b) 逻辑模块的设计要点。
c) 系统稳定及可扩展的秘诀。
7. 模板方法模式
a) 部分的多态。
b) 模板方法模式的使用场合。
c) 模板方法模式与IOC。
例:文件解析器中的模板方法模式。
8. 策略模式
a) 继承与组合的辨析。
b) 多态的经典使用。
c) 无处不在的策略模式。 例:运输系统;在多窗口系统中引入策略模式。
9. 桥接模式 a) 从“类爆炸”说起。
b) 复杂多对多的处理。
c) 仅针对接口编程是不够的。
d) 桥接模式的要点:抽象类行为的具体实现中有重复的方法。
e) 从桥接模式到面向对象的误区。 例:在文件解析器中引入桥接模式。
10. 状态模式
a) 状态模式的本质:类状态机。
b) 状态模式的前提条件:经常发生改变的是状态(业务流程),而非对应的处理。
c) 状态模式使用。
d) 状态模式与表驱动法。
e) 策略、桥接、状态、模板方法模式的辨析。
11. 装饰模式 a) 装饰模式的使用场合。
b) 装饰模式的要点。
c) Java中的装饰模式。
例:装饰模式在打印中的使用。
12. 代理模式 a) 代理模式的使用场合。
b) 代理模式的要点。
c) 代理模式与AOP
13. 访问者模式
a) 访问者模式的使用场合。
b) 双重分发机制。
c) 与桥接模式的比较。
例:在演示控制系统中引入桥接模式。
14. 责任链模式
a) 责任链模式的使用场合。
b) 责任链模式的要点。
c) 消息路由与责任链模式。
15. 组合模式
a) 组合模式的使用场合。
b) 组合模式的使用要点。
c) 例:组合模式在表单统计中的使用。
第六单元 系统流程控制的设计——操作型模式
内容一:系统中流程控制的设计
1. 类名暗含的意味
2. 临时创建对象的用途
3. 工作流与命令模式
4. 消费者-生产者模式
5. 消息广播的多种实现形态
内容二:操作型模式
6. 命令模式
1) 命令模式的特点、优点及缺点。
2) 命令模式的典型使用场合。 例:在客户端与服务器端传递命令。 例:在元搜索系统中使用命令模式。
7. 观察者模式
1) 观察者模式的使用场景。
2) 观察者模式与MVC。
3) 观察者模式使用中变体。 例:用观察者模式解决多窗口系统的联动问题。
8. 享元模式
1) 享元模式的使用场景。
2) 内存管理:存根(stub)与享元模式。
9. 备忘录模式
1) 备忘录的使用场景。
10. 迭代器模式
1) Java、stl、c#中的迭代器实例。
例:构造统一的树状结构迭代。
11. 解析器模式:
1) 解析器模式的使用场合。
第七单元 如何才能正确使用模式
内容一:设计模式的精髓——封装变化
1. 设计模式精髓—如何应对变化
2. 封装变化的原则——避免“散弹枪式的外科手术”
3. 如何抽取出系统中的变化点及不变点
4. 不同因素的隔离——保护变量原则
5. 设计模式中封装变化的思想和具体手段探讨
内容二:模式案例–某订单系统
1. 介绍项目需求情况,进行设计
2. 学习设计模式(Strategy / Abstrct Factory/ Template Method)
内容三:模式案例–某数据展示系统
1. 项目子系统背景和需求
2. 系统的设计思考过程
3. 展示如何用模式,进行设计
4. 学习设计模式(Strategy /Command/Template Method/ NULL Objecct /Adapter/表驱动法/Singleton )
内容四:模式案例–某数据分析系统
1. 项目子系统背景和需求
2. 系统的设计思考过程
3. 展示如何用模式,进行设计
4. 学习设计模式(Observer / Visitor/ Composite /Command/ Strategy /Adapter/Singleton )
第八单元 重构到模式
内容一:重构到模式----错了再改,事不过三
1. 设计坏味道概述
2. 重构思想
3. 重构到设计模式
4. 常见设计模式的重构演化的过程
内容二:案例- 网络数据分析系统的设计
1. 介绍项目需求情况,进行设计
2. 通过重构逐步实现设计模式
3. Framework 设计思想—好莱坞原则
4. 学习设计模式
5. Factory模式
6. Strategy模式
7. Decorator模式
8. Observer模式
9. 架构模式-分层、管道过滤器模式
10. 架构模式的重构及演变,每步的依据及效果对比
11. 从结构上考虑、从效率上考虑
第九单元 用模式去思考—对设计模式本质的思索及探讨
内容一:模式案例- 数据文件处理系统
1. 项目背景介绍和前期规划
2. 从初的需求进行分析,到系统的设计,后到编码实现该案例,全程进行面向对象的分析,建模,设计和终的开发实现.
3. 学习IOC思想在框架设计中的重要作用
4. 在案例中自然使用模式,而非生搬硬套! (Façade, Strategy、Template Method 、Mediator, Simple Factory Command,模式)
5. 案例采用逐步推演的方法,针对需求的不断变化进行设计的演变。设计灵活的系统框架
6. 通过案例学习怎样才能合适应用模式
内容二:设计模式的本质探讨
1. 指出什么是优秀设计和丑陋设计
2. 总结自己的模式-神似而非型似
3. 探讨相似模式的本质
4. “间接类”模式的推演及演化
5. “流程类”模式的推演及演化
6. 避免模式的误用,讨论模式的陷阱:在看似典型的场景,但不宜使用模式的场合。
内容三:案例- 元搜索系统分析及设计
1. 简单背景介绍
2. 如何面对纷繁的变化因素的组合
3. 一定要使用模式吗——如果能很好地能抽象、隔离不同因素,也许它就是模式。
4. 讨论Command模式的本质。
内容四:案例- 电子文件生成
1. 简单背景介绍
2. 使用模式的第一反应,及陷入陷阱的思索
3. 具体场景使用模式的本质讨论
4. 多态的本质
5. 讨论并介绍表驱动法
6. Template Method、DIP原则Strategy模式的的灵活使用——获得优雅的设计
第十单元 大型系统中的模式运用
内容一:大型系统的及发展及核心技术  应用服务和数据服务分离  使用缓存改善避免数据库瓶颈 
应用服务器集群和负载均衡避免运用服务器瓶颈  数据库读写分离 
用CDN及分布式文件系统加速系统响应  分布式数据库系统及NoSQL运用 
进行横向的业务拆分  分布式服务,打造自己的软件生态环境 内容二:系统的负载均衡模式  HTTP 重定向负载均衡 
DNS 域名解析负载均衡  反向代理负载均衡  IP(NAT) 负载均衡  数据链路层负载均衡  负载均衡算法-hash一致性算法
内容三:系统的缓存模式  客户端缓存策略(浏览器缓存、本地Navtive代码缓存)  代理服务器缓存  CDN缓存  反向代理服务器缓存  Memcached 分布式缓存集群的访问模型  Memcached 分布式缓存集群的伸缩性方案 
分布式缓存的一致性Hash 算法 典型案例分析:缓存策略如何应用在自己的实际项目中
内容四:分布式数据存储策略  分布式文件系统  数据存储服务器集群  NoSQL 数据库