意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中
主要解决的问题:一些方法通用,却在每一个子类中都重写了这一方法(抽象类类似)
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使系统更加庞大
***由子类实现这些抽象方法
定义模板类
package com.cy;
/*
表示游戏对应的模板类(方法由具体的子类来完成)
所以此类定义为抽象类
*/
public abstract class Game {
//游戏初始化
public abstract void initialize();
//开始游戏
public abstract void startPlay();
//结束游戏
public abstract void endPlay();
//这三个步骤应统一起来?定义一个游戏的操作方法
public void play(){
initialize();
startPlay();
endPlay();
}
}
Game1
package com.cy;
/*
板球运动
*/
public class Cricket extends Game{
@Override
public void initialize() {
System.out.println("板球游戏开始初始化");
}
@Override
public void startPlay() {
System.out.println("板球游戏正在进行中");
}
@Override
public void endPlay() {
System.out.println("板球游戏结束");
}
}
Game2
package com.cy;
public class FootBall extends Game{
@Override
public void initialize() {
System.out.println("足球游戏开始初始化");
}
@Override
public void startPlay() {
System.out.println("足球游戏正在进行中");
}
@Override
public void endPlay() {
System.out.println("足球游戏结束");
}
}
创建客户端
package com.cy;
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game=new FootBall();
game.play();
Game game1=new Cricket();
game1.play();
}
}
破坏模式:play方法可以被子类重写,所以可以用final关键字修饰play方法,是设计上的一个提升缺点:football类如果还想实现其他父类,扩展将会违背单继承