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!

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

技术教程推荐

许式伟的架构课 -〔许式伟〕

研发效率破局之道 -〔葛俊〕

雷蓓蓓的项目管理实战课 -〔雷蓓蓓〕

Vim 实用技巧必知必会 -〔吴咏炜〕

WebAssembly入门课 -〔于航〕

手把手带你写一个Web框架 -〔叶剑峰〕

Web漏洞挖掘实战 -〔王昊天〕

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

Web 3.0入局攻略 -〔郭大治〕

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