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)

相关推荐
无敌最俊朗@1 小时前
STL-vector面试剖析(面试复习4)
java·面试·职场和发展
暮乘白帝过重山2 小时前
ArkTS ForEach 参数解析:组件与键值生成器
开发语言·数据库
PPPPickup2 小时前
easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人
java·前端·javascript
LiamTuc2 小时前
Java构造函数
java·开发语言
三途河畔人2 小时前
Pytho基础语法_运算符
开发语言·python·入门
长安er2 小时前
LeetCode 206/92/25 链表翻转问题-“盒子-标签-纸条模型”
java·数据结构·算法·leetcode·链表·链表翻转
Benmao⁢2 小时前
C语言期末复习笔记
c语言·开发语言·笔记·leetcode·面试·蓝桥杯
adsadswee2 小时前
Qt 样式与 QLinearGradient 渐变详解
开发语言·qt·qt样式表·qlineargradient·qss渐变效果
菜鸟plus+2 小时前
N+1查询
java·服务器·数据库
我要添砖java2 小时前
《JAVAEE》网络编程-什么是网络?
java·网络·java-ee