Java设计模式四:深入理解模板模式(Template Pattern)

本文深入解析模板模式设计,探讨如何通过定义操作中的算法骨架来允许子类重写具体步骤,而不改变整体流程。适用于多个子类共享相同逻辑或程序框架相似的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

https://www.toutiao.com/a6627799628555223555/

模板设计模式在书中定义:

  定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

  通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。

使用场景:

1、在多个子类中拥有相同的方法,而且逻辑相同时,可以将这些方法抽出来放到一个模板抽象类中。

2、程序主框架相同,细节不同的情况下,也可以使用模板方法。

代码实现

我们将创建一个定义操作的 Game 抽象类,其中在该类中定义模板方法并设置为 final,这样它就不会被重写。模板方法定义游戏通用基本骨架:开始游戏和结束游戏 。basketball和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。

设计类:抽象类、实现子类

1、创建一个抽象类,它的模板方法被设置为 final。

public abstract class GameTemplate {

   abstract void startPlay();
   abstract void endPlay();
 
   //模板方法
   public final void play(){
 
      //开始游戏
      startPlay();
 
      //结束游戏
      endPlay();
   }
}

2、创建扩展了上述类的实体类。

public class Basketball extends GameTemplate {
 
   @Override
   void endPlay() {
      System.out.println("Basketball Game Finished!");
   }
 
   @Override
   void startPlay() {
      System.out.println("Basketball Game Started. Enjoy the game!");
   }
}
public class Football extends Game {
 
   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }
 
   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

演示

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值