信息发布→ 登录 注册 退出

Java中常用的设计模式之模板模式详解

发布时间:2026-01-11

点击量:
目录
  • 优点
  • 缺点
  • 使用场景
  • 一、实现方式
    • 1、游戏抽象类
    • 2、LOL游戏类
    • 3、CF游戏类
  • 二、测试
    • 总结

      优点

      封装不变部分,扩展可变部分。

      提取公共代码,便于维护。

      行为由父类控制,子类实现。

      缺点

      每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

      使用场景

      1.有多个子类共有的方法,且逻辑相同。

      2.重要的、复杂的方法,可以考虑作为模板方法。

      一、实现方式

      假设一个场景,我们在玩游戏的时候,都需要初始化加载游戏,然后开始游戏,最后结束游戏,这像是一套模板一样的操作,但是具体的实现方法却不同,例如:LOL 游戏与 CF 游戏的加载资源肯定不同,游戏的内容也不同。

      1、游戏抽象类

      package com.asurplus.common.template;
      /**
       * 游戏抽象类
       */
      public abstract class Game {
          // 初始化游戏
          abstract void init();
          // 开始游戏
          abstract void start();
          // 结束游戏
          abstract void end();
          // 模板
          public final void play() {
              // 初始化游戏
              init();
              // 开始游戏
              start();
              // 结束游戏
              end();
          }
      }
      

      2、LOL游戏类

      package com.asurplus.common.template;
      import lombok.extern.slf4j.Slf4j;
      /**
       * LOL游戏
       */
      @Slf4j
      public class LolGame extends Game {
          @Override
          void init() {
              log.info("初始化 LOL 游戏");
          }
          @Override
          void start() {
              log.info("LOL 游戏开始");
          }
          @Override
          void end() {
              log.info("LOL 游戏结束");
          }
      }
      

      3、CF游戏类

      package com.asurplus.common.template;
      import lombok.extern.slf4j.Slf4j;
      /**
       * CF游戏
       */
      @Slf4j
      public class CfGame extends Game {
          @Override
          void init() {
              log.info("初始化 CF 游戏");
          }
          @Override
          void start() {
              log.info("CF 游戏开始");
          }
          @Override
          void end() {
              log.info("CF 游戏结束");
          }
      }
      

      二、测试

      package com.asurplus.common.template;
      
      /**
       * 模板模式
       */
      public class TestMain {
          public static void main(String[] args) {
              // LOL 游戏
              Game lolGame = new LolGame();
              lolGame.play();
              System.out.println();
              // CF 游戏
              Game cfGame = new CfGame();
              cfGame.play();
          }
      }
      

      输出结果

      可以看出,一套模板,可以有多个实现方式,从而实现了我们的工厂模式。

      总结

      本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!   

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!