模板方法设计模式

思想:抽象类体现的是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为。
解决的问题:1.当功能内部一部分实现是确定的,一部分实现是不确定的,这时可以把不确定的部分暴露出去,让子类去实现;2.换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现,这就是一种模板模式。
代码实现

package com.atguigu.java;

public class TemplateTest {
    public static void main(String[] args) {
        Template template = new SubTemplate();
        template.spendTime();
    }
}

abstract class Template {
    //计算某段代码执行所需要花费的时间
    public void spendTime() {
        long start = System.currentTimeMillis();
        this.code();
        long end = System.currentTimeMillis();
        System.out.println("花费的时间为:" + (end - start));
    }

    public abstract void code();
}

class SubTemplate extends Template {
	//计算1-1000之间的所有质数
    @Override
    public void code() {
        for (int i = 2; i <= 1000; 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);
            }
        }
    }
}

执行结果

D:\Java\JDK\bin\java.exe "-javaagent:D:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=2323:D:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\JDK\jre\lib\charsets.jar;D:\Java\JDK\jre\lib\deploy.jar;D:\Java\JDK\jre\lib\ext\access-bridge-64.jar;D:\Java\JDK\jre\lib\ext\cldrdata.jar;D:\Java\JDK\jre\lib\ext\dnsns.jar;D:\Java\JDK\jre\lib\ext\jaccess.jar;D:\Java\JDK\jre\lib\ext\jfxrt.jar;D:\Java\JDK\jre\lib\ext\localedata.jar;D:\Java\JDK\jre\lib\ext\nashorn.jar;D:\Java\JDK\jre\lib\ext\sunec.jar;D:\Java\JDK\jre\lib\ext\sunjce_provider.jar;D:\Java\JDK\jre\lib\ext\sunmscapi.jar;D:\Java\JDK\jre\lib\ext\sunpkcs11.jar;D:\Java\JDK\jre\lib\ext\zipfs.jar;D:\Java\JDK\jre\lib\javaws.jar;D:\Java\JDK\jre\lib\jce.jar;D:\Java\JDK\jre\lib\jfr.jar;D:\Java\JDK\jre\lib\jfxswt.jar;D:\Java\JDK\jre\lib\jsse.jar;D:\Java\JDK\jre\lib\management-agent.jar;D:\Java\JDK\jre\lib\plugin.jar;D:\Java\JDK\jre\lib\resources.jar;D:\Java\JDK\jre\lib\rt.jar;D:\JavaWorkSpace\day15\out\production\day15 com.atguigu.java.TemplateTest
2
3
4
5
7
9
11
13
17
19
23
25
29
31
37
41
43
47
49
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
121
127
131
137
139
149
151
157
163
167
169
173
179
181
191
193
197
199
211
223
227
229
233
239
241
251
257
263
269
271
277
281
283
289
293
307
311
313
317
331
337
347
349
353
359
361
367
373
379
383
389
397
401
409
419
421
431
433
439
443
449
457
461
463
467
479
487
491
499
503
509
521
523
529
541
547
557
563
569
571
577
587
593
599
601
607
613
617
619
631
641
643
647
653
659
661
673
677
683
691
701
709
719
727
733
739
743
751
757
761
769
773
787
797
809
811
821
823
827
829
839
841
853
857
859
863
877
881
883
887
907
911
919
929
937
941
947
953
961
967
971
977
983
991
997
花费的时间为:3

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值