架构师训练营 Week3 代码重构 - 学习总结 设计模式
概要
这次的学习总结会分为两大部分,
一、对本周课程的总结
二、关于设计模式进一步的了解扩展 << Placeholder >>
课程学习总结
一、面向对象的设计模式
1. 设计模式概述
a. 作用
这里感觉ppt中的列表应该是倒过来的
OOD的目标:强内聚,低耦合。这是一个从学习软件编程以来就不听出现的一个名词
OOD的原则:SOLID,上周的课程里刚讲到了这几个设计原则,可以说是对强内聚,低耦合的进一步具话,通过支持这些原则来实现目标。
设计模式:本周的主题。只是讲原则还是有些抽象。设计模式是对常见问题中解决方案的总结。虽然每种设计模式的实现并不能100%的支持,但它们的存在使我们离OOD的目标更近了一步。
框架:
老话说的好, “不要重复发明轮子”。前面几点讲到了几点架构设计也好编程也好要遵循的目标原则和一套可以参考的方案。当我们开始应用到实际还是不可能什么都从头开始的。世界那么大,为什么要天天搬砖呢。
框架就是一类可复用的架构方案的设计与实现。它与工具的区别在于程序需要调用工具代码。框架会调用应用程序代码。
应用程序:这就是我们的工作了。它的存在就是解决我们现实世界的问题。也是以上从目标到框架最终的劳动产出。
b. 定义及分类
每一种设计模式描述了一类问题的通用解决方案。
每个设计模式会分为四个部分
名称
待解决的问题:问题及环境上下文
解决方案:设计元素(类和对象)、它们的关系、职责及合作。解决方案是抽象的,它不代表具体实现
结论 :运用这种方案的利和弊。主要是指它对系统的弹性、扩展性和可移植性的影响
按功能划分:
创建模式: 对类的实例化过程的抽象
结构模式: 将类或对象结合在一起形成更大的结构
行为模式: 对在不同的对象之间划分责任和算法的抽象画
按方式分:
类模式:以继承的方式实现模式,静态的。
对象模式: 以组合的方式实现模式,动态的。
2. 常用模式举例
a. 简单工厂模式-排序类实现
b. 单例模式
提前实例化单例
懒加载,第一次调用实例化
c. 适配器模式
类的适配器
对象的适配器
二、Junit中的设计模式
1. 模板方法模式
a. 概述
通过“继承”的方法来实现扩展
基类负责算法的轮廓和骨架
子类负责算法的具体实现
组合 vs 继承
基于“继承”的模板方法比“组合”更容易实现
b. 模板方法的形式
抽象方法
protected abstract void step1();
强制子类实现该步骤
具体方法
protected void doSomething(){...}
子类不需要覆盖,但也可以覆盖
如果要明确告知子类不要覆盖,表明: final
钩子方法
protected void setUp(){}
空的实现(缺省适配器)
子类可选择性覆盖
c. JUnit
d. Java Servlet 中的模板方法
2. 策略模式
它通过“组合”的方法来实现扩展
使用场景:
系统需要在多种算法中选择一种。
重构系统时,将条件语句转换成对于策略的多态性调用
3. 组合模式
4. 装饰器模式
三、Spring中的设计模式
1. 依赖注入(DI),控制反转(IoC)
2. Spring中的单例
3. Spring MVC
四、案例分析 Panthera设计模式
评论