抽象类模板

目录

1. 共有部分提取

2. 抽象类模板设计模式

 2.1 输出效果

 简单总结。


1. 共有部分提取

如下,都计算时间和跑一个job的任务,提取之后代码稍微简介,但我们可以发现重复地方还是很多。

package jan06;

public class AA {
    //统计开始和结束的时间
    public void calculateTime() {
        long start = System.currentTimeMillis();
        job();
        long end = System.currentTimeMillis();
        System.out.println("AA 执行的时间是 :" + (end - start));
    }
    //执行一个job
    public void job() {
        long num = 0;
        for (int i = 0; i < 800000; i++) {
            num += i;
        }
    }

}
package jan06;

public class BB {
    //统计开始和结束的时间
    public void calculateTime() {
        long start = System.currentTimeMillis();
        job();
        long end = System.currentTimeMillis();
        System.out.println("BB 执行的时间是 :" + (end - start));
    }
    //执行一个job
    public void job() {
        long num = 0;
        for (int i = 0; i < 800000; i++) {
            num += i;
        }
    }

}

2. 抽象类模板设计模式

当需要无数个类似的job时候, 代码还是重复繁琐,我们可以提取抽象类模板。将job类抽象,放入calculateTime中,就可以形成一种设计模式。

1. 简历JobTemplate抽象类模板,将job方法定义为抽象方法。将calculateTime写在模板的普通方法。调用抽象类方法job。

2. 原来的AA和BB继承Job抽象类模板,并且重写Job方法。并且不需要在写自己的calculateTime方法。

3.创建测试类。

package jan06;

//抽象类, 模板设计模式。
abstract public class JobTemplate {
    abstract public void job(); //抽象方法job
    public void calculateTime(String task) {
        long start = System.currentTimeMillis();
        job();
        long end = System.currentTimeMillis();
        System.out.println(task+ "的执行时间是: " + (end - start));
    }

}
package jan06;

public class BB extends JobTemplate{

    //执行一个job
    @Override
    public void job() {
        long num = 0;
        for (int i = 0; i < 90000000; i++) {
            num += i;
        }
    }

}
package jan06;

public class AA extends JobTemplate{
    //执行一个job
    @Override
    public void job() {
        long num = 0;
        for (int i = 0; i < 800000; i++) {
            num += i;
        }
    }

}
package jan06;

public class TestDemo {
    public static void main(String[] args) {
        AA aa = new AA();
        aa.calculateTime("AA");
        BB bb = new BB();
        bb.calculateTime("BB");
    }
}

 

 2.1 输出效果

 简单总结。

AA的编译类型和运行类型都是AA, 当AA里找不到calculateTime方法时, 就会去父类寻找该方法,从而运行。父类中的job方法可以实现动态绑定,真正实行job时,会找到子类AA、BB里重写的job方法。从而形成设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值