模板模式

模板模式

定义:

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

好处:

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

应用实例:

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

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

posted @ 2021-10-22 15:48  梅子猪  阅读(43)  评论(0编辑  收藏  举报