模板方法模式
“组件协作”模式
- 现代软件专业分工之后的第一个结果是”框架与应用程序的划分”,”组件协作”模式是通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式
- 典型模式分为:
- Template Method(模板方法模式)
- Strategy (策略模式)
- Observe / Event (观察者模式)
模板方法模式
- 在软件构建规程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因,而无法和任务的整体结构同时实现
- 定义一个操作中的 算法骨架(稳定),而将一些步骤 延迟(变化) 到子类中.Template Method使得子类可以不改变(复用)一个算法的结构即可定义 (override重写) 该算法的某些特定步骤.
代码例子
第一种常见的处理方式
- 1.程序任务整体操作结构比较稳定,都是从step1依次运行到step5
- 2.子任务step1 step3 step5任务稳定 ; 子任务step2 step4不稳定,常常变化
1 | class Libary{ |
1 | class Application{ |
模板方法模式改造
- Template Method模式是一种基础性设计模式,在面向对象系统中有大量的应用.用最简洁的机制(虚函数的多态性)为很多应用程序框架提供灵活的扩展点,是代码复用方面的基本实现
- 除了可以灵活应对子步骤的变化外,反向控制结构是Template Method的典型应用(你不要调用我,让我来调用你)
- 在具体实现方面,被TemplateMethod调用的虚方法可以有具体的实现,也可以没有任何实现(抽象方法,纯虚方法),但 一般推荐将其设置为protected方法.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43abstract class Libary{
//稳定
protected void step1(){
//步骤一...
}
//稳定
protected void step3(){
//步骤三...
}
//稳定
protected void step5(){
//步骤五...
}
//变化
abstract boolean step2();
abstract void step4();
//稳定
public void run(){ // Template Method
//步骤一
step1;
//步骤二
if(step2){ //支持变化 ===> 虚函数的多态调用
//步骤三
step3;
}
//步骤四
for(int i=0;i<4;i++)
step4;
//步骤五
step5;
}
}
1 | class Application extend Libary{ |