模板设计模式

160 阅读2分钟
定义:


模板设计模式,定义一组算法的框架,这些算法的步骤大致相同。而将这些算法中不同的步骤延迟到子类中实现。


例子:


我们玩儿游戏,一般需要经历这几个步骤,加载游戏、读取存档、开始游戏、存档、结束游戏,现在将这些步骤固定下来,这样这样不同的游戏就可以根据这个模版进行开发,实现自己的游戏方式了。


首先,定义好我们的方法

[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
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
public abstract class AbstractGame {
public final void play(){
this.loading();
this.read();
this.start();
this.save();
this.end();
}
/**
* 加载游戏
*/
public abstract void loading();
/**
* 读档
*/
public abstract void read();
/**
* 开始游戏
*/
public abstract void start();
/**
* 游戏存档
*/
public abstract void save();
/**
* 结束游戏
*/
public abstract void end();
}



比如我们常见的超级玛丽

[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class SuperMario extends AbstractGame {
@Override
public void loading() {
System.out.println("嗨,我是超级马里奥");
}
@Override
public void read() {
System.out.println("我的档案是联网保存的");
}
@Override
public void start() {
System.out.println("吃蘑菇,打小怪");
}
@Override
public void save() {
System.out.println("联网保存档案");
}
@Override
public void end() {
System.out.println("我是超级马里奥,拜拜");
}
}


还有贪吃蛇

[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Snake extends AbstractGame {
@Override
public void loading() {
System.out.println("hello,我是贪吃蛇");
}
@Override
public void read() {
System.out.println("贪吃蛇的档案");
}
@Override
public void start() {
System.out.println("开始吃豆子");
}
@Override
public void save() {
System.out.println("保存长度");
}
@Override
public void end() {
System.out.println("结束");
}
}


运行一下


[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
public class PlayGame {
public static void main(String[] args) {
System.out.println("------------开始玩儿超级马里奥------------");
AbstractGame game1 = new SuperMario();
game1.play();
System.out.println("------------开始玩儿贪吃蛇---------------");
AbstractGame game2 = new Snake();
game2.play();
}
}


运行结果

[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
------------开始玩儿超级马里奥------------
嗨,我是超级马里奥
我的档案是联网保存的
吃蘑菇,打小怪
联网保存档案
我是超级马里奥,拜拜
------------开始玩儿贪吃蛇---------------
hello,我是贪吃蛇
贪吃蛇的档案
开始吃豆子
保存长度
结束

总结:

模板设计模式,就是将公用的步骤抽取出来,具体的实现交由不同的子类实现。