• 模板模式


    模板模式

    定义:

      在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现

    好处:

      代码复用, 对于某些算法的实现时,很有效,确定了整体的架子,让子类去实现具体的步骤

    应用实例:

    • 造房子的时候,步骤:地基、走线、水管都一样

    • 连接数据库,步骤: 加载驱动 、 获取连接对象、执行SQL、处理结果 、关闭对象

    • 。。。等

    示例

    代码背景:

    • 打LOL游戏的步骤是:

      1. PC登录

      2. 初始化游戏

      3. 开始匹配

      4. 游戏结束

    • 打王者荣耀游戏的步骤:

      1. 手机登录

      2. 初始化游戏

      3. 开始匹配

      4. 游戏结束

    比较发现 2、3、4步骤是很相似的,1步骤不同(王者有PC端,LOL也有了手游,以上举例),所以我们可以提取中抽象类。

    定义模板步骤

    /**
     * @Author: MMDZ
     * @Date: 2021/10/22
     * @Desc: TODO 游戏模板
     */
    public abstract class Game {
        protected abstract void into();
        protected void initialize(){
            System.out.println("初始化");
        };
        protected void startPlay(){
            System.out.println("开始匹配");
        };
        protected void endPlay(){
            System.out.println("游戏结束");
        };
    
        //模板
        public final void play(){
            //登入
            into();
            //初始化游戏
            initialize();
            //开始游戏
            startPlay();
            //结束游戏
            endPlay();
        }
    }

    定义游戏

    /**
     * @Author: CN802195
     * @Date: 2021/10/22
     * @Desc: TODO LOL游戏
     */
    public class Lol extends Game {
        @Override
        protected void into() {
            System.out.println("LOL英雄联盟 PC登录 登录");
        }
    }
    /**
     * @Author: MMDZ
     * @Date: 2021/10/22
     * @Desc: TODO 王者荣耀游戏
     */
    public class Wzry extends Game {
        @Override
        protected void into() {
            System.out.println("王者荣耀 手机登录");
        }
    }

    测试

    public class TemplatePatternDemo {
        public static void main(String[] args) {
            // write your code here
            Game game = new Lol();
            game.play();
            System.out.println();
            game = new Wzry();
            game.play();
        }
    }
    
    /* 控制台显示
    LOL英雄联盟 PC登录 登录
    初始化
    开始匹配
    游戏结束
    
    王者荣耀 手机登录
    初始化
    开始匹配
    游戏结束
    */

    总结

    1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。

    2)使用的是继承

  • 相关阅读:
    关于通胀,交易手续费和加密货币的货币政策
    私有链和联盟链的机会与挑战
    耶鲁大学公开课:博弈论第九节(笔记)
    区块链匿名技术
    区块链对比数据库
    硬盘 分区 格式化 和挂载
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
  • 原文地址:https://www.cnblogs.com/mmdz/p/15439290.html
Copyright © 2020-2023  润新知