Java 设计模式-模板模式

java

模式介绍

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

使用场景

1、有多个子类共有的方法,且逻辑相同。

2、重要的、复杂的方法,可以考虑作为模板方法。

3、AbstractList 抽象类中,一些具体的方法中需要子类实现抽象的方法才能好用。

系统实现

/**

* 游戏抽象类,其中 play 为模板方法

*/

public abstract class Game {

abstract void initializeGame();

abstract void startGame();

abstract void endGame();

// 钩子方法,子类看情况来决定是否覆盖

public void otherOperation(){}

public final void play(){

initializeGame();

startGame();

endGame();

otherOperation();

}

}

/**

* 足球类

*/

public class Football extends Game {

@Override

void endGame() {

System.out.println("Football Game Finished!");

}

@Override

void initializeGame() {

System.out.println("Football Game Initialized! Start playing.");

}

@Override

void startGame() {

System.out.println("Football Game Started. Enjoy the game!");

}

}

/**

* 板球类

*/

public class Cricket extends Game {

@Override

void endGame() {

System.out.println("Cricket Game Finished!");

}

@Override

void initializeGame() {

System.out.println("Cricket Game Initialized! Start playing.");

}

@Override

void startGame() {

System.out.println("Cricket Game Started. Enjoy the game!");

}

@Override

public void otherOperation() {

System.out.println("see you next time!");

}

}

/*

* 客户端

*/

public class Client {

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!

see you next time!

******************************************

Football Game Initialized! Start playing.

Football Game Started. Enjoy the game!

Football Game Finished!

以上是 Java 设计模式-模板模式 的全部内容, 来源链接: utcz.com/z/393726.html

回到顶部