【Java】23种设计模式——14.模板方法模式

定义

模板方法模式(Template Method Pattern),:这是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。

定义角色

  1. 抽象类(AbstractClass):定义算法骨架和基本操作
  2. 具体类(ConcreteClass):实现抽象类中的抽象操作

应用场景

  • 一次性事项算法不变的部分,将可变行为留给子类实现
  • 控制子类扩展,只允许拓展特定操作。
  • 多个类包含相同算法,但某些步骤实现不同。

使用

游戏框架模板方法。

  • 抽象类 (游戏抽象方法)、

    /**
     * 测试模板模式
     * @Author:lyj
     * @Date:2025/5/20 10:29
     */
    public class TestTemplate {
        /**
         * 测试模板模式
         * @author lyj
         * @date 2025-05-20
         */
        @Test
        public void test(){
            // 板球
            Game game1 = new Crickeet();
            game1.play();
            System.out.println("=======");
            // 足球
            Game game2 = new FootBall();
            game2.play();
        }
    }
    
  • 具体类 (板球游戏,足球游戏)

    /**
     * 模板模式-具体类: 板球
     * @Author:lyj
     * @Date:2025/5/20 10:21
     */
    public class Crickeet extends Game{
        /**
         * 游戏初始化
         */
        @Override
        public void initialize() {
            System.out.println("初始化板球游戏...");
        }
    
        /**
         * 开始游戏
         */
        @Override
        public void startPlay() {
            System.out.println("开始板球游戏...");
        }
    
        /**
         * 结束游戏
         */
        @Override
        public void endPlay() {
            System.out.println("结束板球游戏...");
        }
    }
    
    /**
     * 模板模式-具体类:足球游戏
     * @Author:lyj
     * @Date:2025/5/20 10:26
     */
    public class FootBall extends Game {
        /**
         * 初始化游戏
         */
        @Override
        public void initialize() {
            System.out.println("初始化足球游戏……");
        }
    
        /**
         * 开始游戏
         */
        @Override
        public void startPlay() {
            System.out.println("开始足球游戏……");
        }
    
        /**
         * 结束游戏
         */
        @Override
        public void endPlay() {
            System.out.println("结束足球游戏……");
        }
    }
    

客户端运行:

// 板球
Game game1 = new Crickeet();
game1.play();
System.out.println("=======");
// 足球
Game game2 = new FootBall();
game2.play();

运行结果:
image

posted @ 2025-06-20 16:38  陆陆无为而治者  阅读(79)  评论(0)    收藏  举报