Java模板设计模式

场景类:

public class Client {

public static void main(String[] args) {

AbstractClass class1 = new ConcreteClass1();

AbstractClass class2 = new ConcreteClass2();

//调用模板方法

class1.templateMethod();

class2.templateMethod();

}

4.案例讲解

需求

  • 有多个类,完成不同的job

  • 要求能够得到各自的完成时间

1.)传统方式实现

代码

package Abstract;

public class AbstractExercise {

public static void main(String[] args) {

AA aa = new AA();

aa.calcTime();

BB bb = new BB();

bb.calcTime();

}

}

class AA {

// 计算任务1

// 1 + 2 + …+ 1

必看视频!获取2024年最新Java开发全套学习资料 备注Java

00000

public void calcTime() {

//得到开始时间

long start = System.currentTimeMillis();

job(); // 计算执行任务的时间

// 得到结束时间

long end = System.currentTimeMillis();

System.out.println("AA 执行的时间 " + (end - start) + “毫秒”);

}

long sum = 0;

public void job(){

for (int i = 1; i <= 100000; i++) {

sum += i;

}

}

}

class BB {

// 计算任务2

// 1*1 + 2*2 +… 10000*10000

public void calcTime() {

//得到开始时间

long start = System.currentTimeMillis();

job(); // 计算执行任务的时间

// 得到结束时间

long end = System.currentTimeMillis();

System.out.println("BB 执行的时间 " + (end - start) + “毫秒”);

}

long sum = 0;

public void job(){

for (int i = 1; i <= 10000; i++) {

sum += i * i;

}

}

}

// CC类 DD类…

对于不同的任务它们有自己各自的执行方式,我们需要做的是统计它们各自执行完任务所花费的时间。我们通过观察发现计算时间的方法被重复的使用,方法是一样的方法只是各个任务执行的细节不同罢了,如果有CC类 、DD类…的不同任务job()——因此我们可以将其设置为抽象方法!,那么计算时间的方法calcTime()要在每一个类中使用!这样代码就大量的重复了,不利于修改与维护!——因此我们可以将其设置为模板方法!

2.)模板设计模式实现

抽象模板类(AbstractClass)

package Abstract;

public abstract class Tempalte { //父类——模板类

public abstract void job();// 抽象方法

// 模板方法

public void calcTime() { // 实现方法,调用job()方法

//得到开始时间

long start = System.currentTimeMillis();

job(); // 计算执行任务的时间————动态绑定机制

// 得到结束时间

long end = System.currentTimeMillis();

System.out.println("任务执行的时间 " + (end - start) + “毫秒”);

}

}

具体模板类(ConcreteClass)

package Abstract;

public class AA extends Tempalte{

// 计算任务1

// 1 + 2 + …+ 100000

long sum = 0;

@Override

public void job(){

for (int i = 1; i <= 100000; i++) {

sum += i;

}

}

}

package Abstract;

public class BB extends Tempalte{

// 计算任务2

// 1*1 + 2*2 +… 10000*10000

long sum = 0;

@Override

public void job(){

for (int i = 1; i <= 10000; i++) {

sum += i * i;

}

}

}

测试类(ConcreteClass)

package Abstract;

public class Application {

public static void main(String[] args) {

Tempalte aa = new AA();

aa.calcTime(); // 动态绑定机制,对多态的理解

Tempalte bb = new BB();

bb.calcTime();

}

}

5.模式模式优缺点:

1.)优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

  • 第一部分:Java基础-中级-高级

image

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

image

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

image

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

image

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

image

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

image

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

image

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

image

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

image

image

image

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

[外链图片转存中…(img-fx85R8VJ-1716462173069)]

[外链图片转存中…(img-ecs9e5kv-1716462173069)]

[外链图片转存中…(img-k82loito-1716462173070)]

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

[外链图片转存中…(img-T7i3QZ5m-1716462173071)]

[外链图片转存中…(img-iVFwWoMt-1716462173071)]

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的模板设计模式是一种行为型设计模式,它允许我们定义一个算法的骨架,但允许子类为其中的一些步骤提供具体的实现。 模板设计模式由两个主要组件组成: 1. 抽象类(Abstract Class):它定义了一个模板方法,该方法提供了算法的骨架。它可以包含一个或多个抽象方法,这些方法由子类来实现。 2. 具体类(Concrete Class):它是抽象类的子类,负责实现抽象方法。 以下是一个示例代码来说明模板设计模式的用法: ```java public abstract class AbstractClass { // 模板方法 public final void templateMethod() { // 步骤一 stepOne(); // 步骤二 stepTwo(); // 步骤三 stepThree(); } // 抽象方法,由子类实现 protected abstract void stepOne(); protected abstract void stepTwo(); // 钩子方法,子类可以选择性地覆盖 protected void stepThree() { // 默认实现 } } public class ConcreteClass extends AbstractClass { @Override protected void stepOne() { // 具体实现步骤一 } @Override protected void stepTwo() { // 具体实现步骤二 } } ``` 在上面的示例中,`AbstractClass` 是抽象类,它定义了一个名为 `templateMethod()` 的模板方法,并声明了三个抽象方法 `stepOne()`、`stepTwo()` 和 `stepThree()`。`ConcreteClass` 是具体类,它继承了 `AbstractClass` 并实现了抽象方法。 通过使用模板设计模式,我们可以在抽象类中定义算法的骨架,而具体的实现可以由子类来完成。这种设计模式使得代码重用和扩展变得更加容易。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值