Java设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法骨架,将一些步骤的具体实现延迟到子类中。模板方法模式通过将共同的代码逻辑放在父类中,而将具体的实现细节留给子类来实现,从而实现代码的复用和扩展。

在模板方法模式中,有两类角色:

  1. 抽象类(Abstract Class):抽象类定义了算法的骨架,其中包含了一系列的抽象方法和具体方法。抽象类中的具体方法可以是抽象方法的默认实现,也可以是一些通用的步骤实现。抽象类中的模板方法用于定义算法的骨架,它调用抽象方法和具体方法来完成算法的执行。
  2. 具体类(Concrete Class):具体类是抽象类的子类,它实现了抽象类中定义的抽象方法,完成具体的实现细节。

下面是一个示例,展示了模板方法模式的应用:

java 复制代码
// 抽象类
abstract class AbstractClass {
    // 模板方法
    public void templateMethod() {
        step1();
        step2();
        step3();
    }

    // 抽象方法,由子类实现
    protected abstract void step1();

    // 具体方法,提供默认实现
    protected void step2() {
        System.out.println("AbstractClass: Step 2");
    }

    // 抽象方法,由子类实现
    protected abstract void step3();
}

// 具体类
class ConcreteClass extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreteClass: Step 1");
    }

    @Override
    protected void step3() {
        System.out.println("ConcreteClass: Step 3");
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.templateMethod();
    }
}

在上面的示例中,AbstractClass 是抽象类,定义了一个模板方法 templateMethod(),它定义了算法的骨架,并调用了抽象方法 step1()step3(),以及具体方法 step2()ConcreteClass 是具体类,它继承了 AbstractClass 并实现了抽象方法 step1()step3()。在客户端代码中,创建了一个 ConcreteClass 的实例,并调用了模板方法 templateMethod(),从而完成了算法的执行。

运行上述代码,将会输出以下结果:

复制代码
ConcreteClass: Step 1
AbstractClass: Step 2
ConcreteClass: Step 3

通过模板方法模式,我们可以将算法的通用部分放在抽象类中,而将具体的实现细节留给子类来实现。这样可以实现代码的复用和扩展,同时还可以避免子类中的代码重复。

相关推荐
Zane19946 小时前
CAS 与原子类:Java 如何实现无锁编程
java·后端
TunerT_TQ6 小时前
【智能体安全治理|专栏第9期】从“一堆规则”到“数字宪法”:智能体治理的下一个阶段
java·开发语言·安全·开源治理·大模型安全·ai基础设施·智能体安全
legendary_bruce6 小时前
RAG知识库进阶-1
java·aigc
必须会一定会6 小时前
大模型手搓文件对比工具(6):差异不用再手选
java·人工智能·ai编程
yio_yin6 小时前
MyBatis
java·前端·mybatis
程序员-Benothing6 小时前
Java ForkJoinPool 详解:从分治思想到高性能并行计算
java·开发语言·后端·面试·职场和发展
鬼鬼鬼6 小时前
从 Prompt 到 Harness:企业级 Agent 工程的完整演进之路
设计模式·架构·ai编程
上海安当技术7 小时前
单点登录 SSO 怎么选协议?SAML 2.0 / OAuth 2.0 / OIDC / CAS 对比与 ERP、OA、CRM 接入实战
java·开发语言
mifengxing7 小时前
Java集合与泛型
java·算法·复习笔记
不才不才不不才7 小时前
Spring 源码系列(14): JDK 动态代理 vs CGLIB,以及拦截器责任链
java·开发语言·spring