抽象类的运用:模板方法的设计模式(含java判断质数的函数)

失踪人口回归,毕竟在掘金更新了一段时间,决定回CSDN再试试呜呜呜。

那么回归主题——今天主要学习了模板方法的设计模式,也算是一种简单的设计模式,也不需要单例模式那样有两个固定的模板。毕竟是抽象类的运用,抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上回保留抽象类的行为方式。

解决的问题:

  • 当功能内部一部分实现是确定的,另一部分实现不确定。这时可以把不确定的部分暴露出去,让子类实现。
  • 换句话说,在软件开发中实现一个算法时,整体步骤很固定,通用,这些步骤在父类中提前写好了。但是某些易变的,不确定的可以抽象出来,供不同子类实现,这就是这种模板模式。

举个例子

我需要一个计算代码实现的时间的函数来计算不同的代码实现时间

那么我可以使用一个抽象类Template(模板)来设计一个模板。在这个模板中添加这个计算时间的方法

public void spendTime(){

        long start = System.currentTimeMillis();

        code();

        long end = System.currentTimeMillis();

        System.out.println("花费的时间为"+(end - start)+"ms");
    }

这段代码中code();就是应该在子类中实现的抽象方法。

我们再使用Print来继承Template这个抽象类,在这个子类中重写code方法(别忘了在抽象类中定义抽象方法code哦),就使用一个经典的计算2-100000以内的质数函数吧(这个函数下次讲嘻嘻)那么代码呈现出来是这样的:

class Print extends Template{
    @Override
    public void code(){
        System.out.println("2-100000所有的质数为:");
        //判断2-100000的质数
        for (int i = 2; i < 100000; i++) {
            boolean isFlag = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if(i%j == 0){
                    isFlag = false;
                    break;
                }
            }
            if(isFlag){
                System.out.println(i);
            }
        }
    }
}

此时我们的code函数就已经被子类重写成为计算2-100000以内质数的函数了,然后再在我们的main函数中去new一个对象p,用p去调用spendTime这个方法,这样我们的执行结果就是2-100000以内的质数啦。
也会显示执行代码的时间28ms(各有不同)
那模板方法的设计模式大概就是这种感觉,就像是你提前设计好要进行的事项,然后之后在事项里填充具体的内容一样。芜湖,休息时间到!再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值