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!

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

技术教程推荐

白话法律42讲 -〔周甲徳〕

Nginx核心知识150讲 -〔陶辉〕

玩转Spring全家桶 -〔丁雪丰〕

从0开始做增长 -〔刘津〕

分布式技术原理与算法解析 -〔聂鹏程〕

乔新亮的CTO成长复盘 -〔乔新亮〕

分布式金融架构课 -〔任杰〕

Vue 3 企业级项目实战课 -〔杨文坚〕

运维监控系统实战笔记 -〔秦晓辉〕

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