Java模板模式及代码

意图

在父类中定义了算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤,这种类型的设计模式属于行为型模式。

主要解决的问题

  • 解决在多个子类中重复实现相同的方法的问题,通过将通用方法抽象到父类中来避免代码重复。

代码实现

父类

复制代码
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 {
 
   @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

复制代码
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!");
   }
}

启动类

复制代码
public class TemplatePatternDemo {
   public static void main(String[] args) {
 
      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();      
   }
}

参考资料:

模板模式 | 菜鸟教程 (runoob.com)

相关推荐
维度攻城狮5 小时前
ros2参数通信案例
开发语言·windows·python·ros2·参数通信
清水白石0085 小时前
Python 与尾递归:为何不优化?如何优雅绕过?
开发语言·python
王大傻09285 小时前
使用python for循环与ord() + chr()实现字符串加密
开发语言·python
Louis Maos5 小时前
堆与栈分配的本质区别
java·开发语言
人道领域6 小时前
【零基础学java】(HashMap源码解析--添加第一个元素)
java·哈希算法·散列表
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 果蔬禽蛋生鲜食品采购配送系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
不要em0啦6 小时前
从0开始学python:函数与数据容器
开发语言·python
zfj3216 小时前
java线程的不同状态下调用interrupt()方法后的行为及注意事项
java·开发语言·interrupt·线程中断·线程状态
XLYcmy7 小时前
高级密码猜测生成器AdvancedPasswordGenerator密码生成器程序详细分析
开发语言·python·算法·网络安全·开发工具·源代码·口令安全
廋到被风吹走7 小时前
【Java】【Jdk】Jdk17->Jdk21
java·开发语言