原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
模板方法通常用来定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法可以在不改变一个算法的结构的情况下,就可以重新定义该算法的某些特定步骤。
举个例子
我们来实现一个竞技类的电子游戏,大部分的竞技游戏的流程基本上都包含如下过程 初始化游戏,启动游戏,游戏结束这几个步骤,但是不同游戏的初始化和启动方法不一样,我们可以考虑使用模板方法来实现。
来看一下UML
:
看一下具体代码如何实现
先来定义一个抽象的游戏类Game
,里面定义模板方法
public abstract class Game {
abstract void init();
abstract void startPlay();
abstract void endPlay();
//template method
public final void play(){
init();
startPlay();
endPlay();
}
}
复制代码
分别定义表示足球游戏的类Football
和表示篮球游戏的类BasketBall
;两个类全部继承自抽象类Game
public class Football extends Game {
@Override
void init() {
System.out.println("Football Game init");
}
@Override
void startPlay() {
System.out.println("Football Game Start");
}
@Override
void endPlay() {
System.out.println("Football Game End");
}
}
复制代码
BasketBall
和Football
类似,因篇幅原因不再列出。
来看一下客户端如何使用
public class TemplatePatternDemo {
public static void main(String[] args){
Game basketBall = new BasketBall();
basketBall.play();
Game football = new Football();
football.play();
}
}
复制代码
总结
模板方法是行为模式之一,模板方法通过把不变的行为搬移到父类,去除子类中的重复代码,使其代码结构更精简。