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


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

    玩游戏王的过程可以抽象为:
    9414344-ccbb38c585380d0b.png
    模板方法.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");
                    }
                }
            };
        }
    

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

  • 相关阅读:
    HDU2203
    POJ3616
    堆排序
    POJ1386+欧拉回路
    快速排序(实现)
    HDU3549+FordFulkerson
    POJ2155
    POJ1195
    mysql案例~关于linux服务器本身的优化问题
    mysql案例~mysql主从复制延迟概总
  • 原文地址:https://www.cnblogs.com/toly-top/p/9781945.html
Copyright © 2020-2023  润新知