Java模板模式

Java模板模式 首页 / 设计模式入门教程 / Java模板模式
模板方法(Template Method)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。

模板方法实例

创建一个 Game 抽象类,该类定义了将模板方法设置为final的操作,以使其无法被覆盖。 Cricket和Football是扩展Game并覆盖其方法的具体类。

无涯教程的演示类 TemplatePatternDemo 将使用 Game 演示模板模式的使用。

Template Pattern UML Diagram

第1步 -  使用最终的模板方法创建一个抽象类。

Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板方法
   public final void play(){

      //调用初始化方法
      initialize();

      //调用开始游戏方法
      startPlay();

      //调用结束游戏方法
      endPlay();
   }
}

第2步 -  创建扩展上述类的具体类。

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!");
   }
}

第3步 -  使用 Game 的模板方法play()演示定义的玩游戏方式。

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();		
   }
}

第4步 -  验证输出。

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!

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

教程推荐

云原生架构与GitOps实战 -〔王炜〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

大厂广告产品心法 -〔郭谊〕

大厂晋升指南 -〔李运华〕

手机摄影 -〔@随你们去〕

软件设计之美 -〔郑晔〕

Kafka核心技术与实战 -〔胡夕〕

Web协议详解与抓包实战 -〔陶辉〕

赵成的运维体系管理课 -〔赵成〕

好记忆不如烂笔头。留下您的足迹吧 :)