前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >去吧!设计模式之模板方法模式

去吧!设计模式之模板方法模式

作者头像
张风捷特烈
发布2018-09-26 16:42:27
2240
发布2018-09-26 16:42:27
举报
零、前言:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中
玩游戏王的过程可以抽象为:

模板方法.png

一、游戏王游戏抽象类
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间:2018/8/25 0025:9:23
 * 邮箱:1981462002@qq.com
 * 说明:游戏王游戏抽象类
 */
public abstract class YoGIOhGame {

    public final void play() {
        shuffle();
        draw();
        run();
        if (isWin()) {
            win();
        } else {
            lost();
        }

    }

    private void shuffle () {
        System.out.println("洗牌");
    }

    private void draw () {
        System.out.println("抽牌");
    }

    private void win () {
        System.out.println("赢");
    }

    private void lost () {
        System.out.println("输");
    }

    protected boolean isWin() {
        return true;
    }

    abstract void run();
}
二、测试类:此处用匿名内部类,你也可以单独将类提出。
代码语言:javascript
复制
public class Player {
    public static void main(String[] args) {

        new YoGIOhGame() {
            @Override
            void run() {
                System.out.println("奥西里斯的天空龙直接攻击玩家!");
            }
        }.play();

    }
}
结果:
代码语言:javascript
复制
洗牌
抽牌
奥西里斯的天空龙直接攻击玩家!
赢
通过改变isWin方法的返回值可以改变输赢
代码语言:javascript
复制
public class Player {
    public static void main(String[] args) {

        new YoGIOhGame() {
            @Override
            void run() {
                System.out.println("奥西里斯的天空龙直接攻击玩家!");
            }

            @Override
            protected boolean isWin() {
                return false;
            }
        }.play();
    }
}

番外篇:使用模板方法查看运行某段程序的耗时秒数
1.耗时测试类
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间:2018/8/25 0025:10:16
 * 邮箱:1981462002@qq.com
 * 说明:耗时测试类
 */
public abstract class TimeTest {

    public TimeTest() {
        this("");
    }

    public TimeTest(String str) {
        long startTime = System.currentTimeMillis();
        run();
        long endTime = System.currentTimeMillis();
        System.out.println(str+"方法耗时:" + (endTime - startTime)/1000.f + "秒");
    }

    protected abstract void run();
}
测试类:结果:run方法耗时:0.641秒
代码语言:javascript
复制
    public static void main(String[] args) {
        new TimeTest("run") {
            @Override
            protected void run() {
                for (int i = 0; i < 100000; i++) {
                    System.out.println("hh");
                }
            }
        };
    }

本文由张风捷特烈原创,转载请注明

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、前言:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中
    • 玩游戏王的过程可以抽象为:
    • 一、游戏王游戏抽象类
    • 二、测试类:此处用匿名内部类,你也可以单独将类提出。
      • 结果:
        • 通过改变isWin方法的返回值可以改变输赢
        • 番外篇:使用模板方法查看运行某段程序的耗时秒数
          • 1.耗时测试类
            • 测试类:结果:run方法耗时:0.641秒
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档