博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
去吧!设计模式之模板方法模式
阅读量:6006 次
发布时间:2019-06-20

本文共 2069 字,大约阅读时间需要 6 分钟。

零、前言:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中

玩游戏王的过程可以抽象为:
模板方法.png

一、游戏王游戏抽象类

/** * 作者:张风捷特烈 * 时间: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();}

二、测试类:此处用匿名内部类,你也可以单独将类提出。

public class Player {    public static void main(String[] args) {        new YoGIOhGame() {            @Override            void run() {                System.out.println("奥西里斯的天空龙直接攻击玩家!");            }        }.play();    }}
结果:
洗牌抽牌奥西里斯的天空龙直接攻击玩家!赢
通过改变isWin方法的返回值可以改变输赢
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.耗时测试类
/** * 作者:张风捷特烈 * 时间: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秒
public static void main(String[] args) {        new TimeTest("run") {            @Override            protected void run() {                for (int i = 0; i < 100000; i++) {                    System.out.println("hh");                }            }        };    }

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

你可能感兴趣的文章
我的 Vue.js 学习日记 (十三) - vue-router
查看>>
猴子自拍版权归谁?
查看>>
Python每日小知识(6)函数滴参数
查看>>
九天学会Java,第五天,函数定义,函数调用
查看>>
React Natve 真机运行步骤及常见错误
查看>>
【module】json
查看>>
文件和字符编码
查看>>
VMware 来安装虚拟机遇到的坑
查看>>
WSL 环境下 Ubuntu 16.04 编译OpenJDK 8
查看>>
关于js中的柯里化(Currying)与反柯里化(Uncurrying)
查看>>
nginx limit配置参数解读
查看>>
深入理解JavaScript,这一篇就够了
查看>>
vuex学习总结
查看>>
原生js系列之无限循环轮播组件
查看>>
配置 SSH Key ☞ GitHub
查看>>
组件化通用模式
查看>>
迭代器模式
查看>>
Vant - 高效的 Vue 组件库,再造一个有赞移动商城也不在话下
查看>>
常见Java面试整理
查看>>
浅谈HTTP长连接
查看>>