Day1 | |
一、 代码与设计模式 1. NASA告诉我们为什么要关注代码 2. 设计与代码实现之间的鸿沟 3. 我们应该更加关注哪一个软件质量特性 4. 设计模式背后的心法 -SOLID原则 | |
二、 单一职责原则 1. 次时代租车服务终端 (ARCS)的初步设计 2. 用例 (UseCase) 的作用 – 划分边界及概览 3. SRP的设计误区 4. 重构至 SRP 的方法1:提取类 5. 重构至 SRP 的方法2:Proxy模式 6. 过程性代码的 SRP 7. 违反直觉的真相:性能优化的步骤 | |
三、 开放封闭原则 1. 代码中的接线板是什么? 2. 编程价值观 – 沟通,简单,灵活 3. 如何做到对扩展开放,对修改封闭 4. 次时代租车服务终端 (ARCS)的促销需求 5. 笨拙的促销实现 6. 如何不修改代码而改变它的行为 7. 最简单的 OCP实现 – 策略模式 1. 敏捷开发的精髓 – 只被第一颗子弹击中 | |
四、 里氏替换原则 1. 什么才是好的继承关系 2. 子类为什么要能透明的替换基类 3. 次时代租车服务终端 (ARCS)的新需求 – 电动轿车费用计算 4. 白盒复用 还是 黑盒复用 5. IS-A的精髓:针对属性还是针对行为 6. 契约式设计继承体系 7. 重构方法:提升为兄弟类 8. 如何才能让 次时代租车服务终端 (ARCS)的代码符合 LSP 8. 这样做我们可能会引入什么新的问题? | |
五、 接口隔离原则 1. 接口“变胖”的问题 – 接口污染 2. 佳能一体机的遗留接口问题 3. 如何实现接口分离 – 适配器模式 4. 类适配器 – 多继承 5. 对象适配器 – 委托 6. 使用单元测试来发现问题 7. 次时代租车服务终端 (ARCS)在接口划分上的问题 8. 如何简化复杂的逻辑 9. 如何使用模板方法分离抽象与具体 1. 案例:ATM机接口设计的演化 | |
六、 依赖倒置原则 1. 结构化设计理念的问题 2. 对象化设计理念 3. 依赖倒置到底倒置了什么 4. 如何分离关注点 5. DI-依赖注入模式:讲对象的创建与使用分离 1. 案例:消息队列设计的演化 | |
七、 策略模式详解 1. 工资发放功能遇到的难题 2. 工资发放功能最初的设计及其问题 3. 对问题的分析过程及其新的设计思路 4. 策略模式及其概念 5. 数据导出功能的设计实现 6. 数据导出功能的变更与改进过程 7. 财务凭证生成功能的设计过程 8. 财务凭证生成功能的初始需求与设计 9. 财务凭证生成功能的扩展与分析过程 | |
八、 代理模式详解 1. 如何隐式的添加日志功能 2. 为Controller添加代理 3. 使用继承方式实现代理模式 4. 动态代理原理解析 5. Java动态代理的实现 6. RPC中的代理模式 | |
九、 状态模式高阶详解 1. 每天都遇到的实现其实不简单 – 电梯按钮的实现 2. 动作视角 ->状态变化 3. 状态视角 ->映射所有动作 4. 使用状态来实现同一个动作的多态 5. 状态模式与策略模式:孪生兄弟 状态模式的实例,权限审批流程 | |
十、 装饰者模式高阶详解 1. 业务量增长带来的多数据源问题 2. 运用装饰者模式巧妙解决多数据源问题 3. 装饰者模式及其概念 4. 装饰者模式的应用 5. 案例:多数据源的设计实现 6. 多数据源问题的分析设计过程 7. 多数据源的设计与实现 8. 案例:商城收银系统的设计变更过程 9. 商城收银系统期初的设计 10. 混合策略的设计与实现 11. 多层装饰者的设计与实现 12. 重新理解里氏替换原则 13. 透明的功能扩展 14. 里氏替换原则 练习:商场收银系统的2种设计与实现 | |
十一、 解释器模式高阶详解 1. 灵活的查询接口设计 2. 查询里需要解决的问题,条件组合 3. AST查询语法树的建立 4. 如何使用组合模式统一查询条件 5. 如何使用解释器模式,构建查询语法树 6. 使用统一的方式递归分析查询表达式 解释器模式的灵活运用 | |
十二、 其他设计模式典型案例 1. 观察者模式:JobHunter的情景剧 2. 代理模式:老板与秘书的差异 3. 命令模式:像工作流一样处理业务 4. 外观模式:超级家庭影院的烦恼 5. 构建器模式:SQL Builder的设计 6. 组合模式:如何构建一棵树 7. 中介者模式:QQ在沟通中的作用 迭代器模式:如何顺序访问一个集合 | |
Day2 | |
十三、 重构到模式- 1. 设计坏味道概述 2. 重构思想 3. 理解如何结合重构和模式; 4. 用模式导向的重构(pattern-directed refactoring)改善既有代码的设计; 5. 找出需要进行模式导向重构的代码段; 6. 了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。 7. 一组坏味 (也就是问题),表示需要进行模式导向的重构; 8. 实现同一模式的不同方式的示例; 9. 什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。 10. 常见设计模式的重构演化的过程 | |
十四、 重构至模式训练营2 – 用 State 替换状态改变条件语句 1. 如何设计电梯按钮的后台逻辑 2. 该从什么角度考虑问题:行为还是对象 3. 实战:遗留代码重构 – 权限判断模块 4. 关键重构方法:ReplaceCodewithClass, ExtractSub-Class,MoveMethod,EncapsulateField | |
十五、 重构至模式训练营3 – 用 Command 替换条件调度 1. 如何设计针对谓词的服务端 2. RESTful API 处理程序的整体结构 3. 实战:遗留代码重构 – 调度模块重构 6. 关键重构方法:ExtractMethod,ExtractClass, ExtractSuper-Class |
课程特点
1. 将UML、OO、设计模式与重构有机结合;
2. 精炼设计原则,通过引入对职责与抽象的分析,提高设计能力;
3. 结合用例驱动与领域驱动,提出场景驱动设计,简化设计过程。