
理解:
有一个抽象类A模板,里面提供了一些默认的抽象方法 m1,m2,m3,m4 固定的模板方法,还需要一个final 修饰的实现方法mRun,方法mRun里面有默认抽象方法的执行顺序;
有多个对抽象类A模板实现类 A1、A2,实现类需要实现模板类里面的抽象方法 m1,m2,m3,m4,具体实现就可以根据的业务需求,以及符合抽象模板里面mRun方法执行顺序,进行顺序执行;
这些抽象方法都有一个默认的执行顺序模板,必须按照这个模板才能正常执行;
例如:
一个生产纸箱的工厂,纸箱的生产步骤都是固定流水线
- 不同木材执行纤维浆
- 纤维平铺
- 上色
- 烘干
这些步骤是固定的,但如果需要不同木材,不同花纹,不同颜色;这就需要不同的具体流水线了,映射的java类里面就是 , A1 类里面,红木,云纹,复古色 ;A2 杨树,无花纹,白色
代码实现:
一个固定的游戏Game运行模板
public abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();//模板public final void play(){//初始化游戏initialize();//开始游戏startPlay();//结束游戏endPlay();}}
游戏一Cricket 按照模板进行实现
public class Cricket extends Game {@Overridevoid endPlay() {System.out.println("Cricket Game Finished!");}@Overridevoid initialize() {System.out.println("Cricket Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Cricket Game Started. Enjoy the game!");}}
游戏二Football 按照模板进行实现
public class Football extends Game {@Overridevoid endPlay() {System.out.println("Football Game Finished!");}@Overridevoid initialize() {System.out.println("Football Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Football Game Started. Enjoy the game!");}}
测试游戏启动
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!
