zoukankan      html  css  js  c++  java
  • 模板模式

    模板模式

    定义:

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

    好处:

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

    应用实例:

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

    • 连接数据库,步骤: 加载驱动 、 获取连接对象、执行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)使用的是继承

  • 相关阅读:
    第三次上机练习
    第三次作业
    第二次上级练习
    第二次作业
    第一次上机练习
    第一次作业
    4.20
    4.16
    4.10
    4.9
  • 原文地址:https://www.cnblogs.com/mmdz/p/15439290.html
Copyright © 2011-2022 走看看