二十四、模板模式
模板模式(Template Pattern),一个抽象类公开定义了执行它的方式/模板。其子类按需实现方法,但调用需用抽象类中定义的方法进行。
简介
模板模式,类似与多态封装,在抽象类中定义一个方法骨架,而在具体的子类中实现。
- 优点:封装可扩展性好,提取公共代码,便于维护,父类控制,子类实现。
- 缺点:每一个不同的方法可能需要一个具体的子类实现,从而导致系统类增加。
实现
定一个抽象类Game
,在其中模板方法设置为final,其他方法可被重写。Cricket
和Football
类扩展了Game
类,并实现抽象方法。
- 创建抽象类
Game.java
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模板方法
public final void play(){
//初始化游戏
initialize();
//开始游戏
startPlay();
//结束游戏
endPlay();
}
}
- 扩展类
创建继承抽象类的具体子类,实现抽象方法,因为不同的抽象方法的具体实现,形成不同的具有类,
然而它们都不能重写final的模板方法,外部调用依然是调用模板方法。
Cricket.java
public class Cricket extends Game {
@override
void endPlay(){
System.out.println("Cricket Game Finished ! ");
}
@override
void initialize(){
System.out.println("Cricket Game Initialized ! Start Playing .");
}
@override
void startPlay(){
System.out.println("Cricket Game Started.Enjoy the Game !");
}
}
Football.java
public class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
- 演示
TemplatePatternDemo.java
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}
- 输出
Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!