课程大纲
课时 | 目的 | 内容 |
1 | 设计模式背景介绍 | Why:避免重复制造拙劣的轮子 |
What:被反复验证过的解题思路 | ||
How:设计思想与原则 | ||
模式背后的设计思想 | 分离变与不变:HTML与非侵入式 CSS,Js | |
依赖于抽象:几何面积计算器的扩展 | ||
组合优于继承:代码复用的结构选择 | ||
2 | 基于问题场景的模式导入(1) | Demo项目介绍 |
Step1. 初始需求:车辆租金计算 | ||
Step1. 初始实现:switch case | ||
Step2. 需求开始变化:按车型促销 | ||
使用“平铺直叙” 的方式基于 Step1 修改 | ||
行为型模式 | 设计原则:开放封闭原则(OCP) | |
如何在代码中引入“接线板”-- 抽象 | ||
使用行为型模式:策略模式 处理 Step2 的需求 | ||
极简UML | 类图 | |
思考对应方案,并使用 UML 表现自己的设计 | ||
3 | 基于问题场景的模式导入(2) | Step3. 需求继续变化:VIP打折,满减 |
如果继续使用“平铺直叙”的方式修改,代码将越来越难以维护 | ||
思路导入:应用对象组合添加间接性 | ||
思路导入:继承的真正的作用:保持类型一致性 | ||
结构性模式 | 基于上述思路,使用结构型模式:装饰器模式 处理 Step3 的需求 | |
装饰器模式的类图核心结构 | ||
此核心结构在其他模式(代理,组合)中也会反复出现 | ||
总结此设计背后的思想:通过对象的组合引入间接性并达到多态 | ||
创建型模式 | Step4. 如何降低装饰器模式的类创建复杂性 | |
创建型模式:工厂模式可以解决问题么?似乎不能 | ||
4 | 基于问题场景的模式导入(3) | 工厂模式 vs 建造者模式 |
建造者模式可以解决的问题:灵活配置复杂对象的创建过程 | ||
创建型模式 | 使用创建型模式:建造者模式 实现 Step4 的需求 | |
总结 | 根据应用模式的 Before VS After,体会使用模式带来的灵活性和扩展性 | |
体会模式背后的设计思路以及原则 | ||
扩展阅读 | 其余模式能解决的问题 | |
电梯按钮背后的处理逻辑:状态模式 | ||
细粒度接口?粗粒度接口?应该怎么选择:外观模式 | ||
Undo,Redo的实现:命令模式 |