工作中模板方法模式用法及其使用场景

简介: 工作中模板方法模式用法及其使用场景

前言

最近有个周边系统对接我们系统进行投保的需求,周边系统会将客户填写好的投保单资料推送到我们系统,我们出完单后将单号返回给他们。此次对接的保险险种有多个,每个数据都有需要特殊处理的地方,但是他们的流程是一样的,投保单校验、入库、提交审核、自动审核等,最大的区别在于不同的险类他们的风险信息不一样,所以需要我们特殊处理。

概述

根据上图业务逻辑,可以看到整个流程是一致的,而且有很多模块都是可以复用,如果后续还有其它特殊险类接入的话,那都要复制黏贴写一套,拓展性和后期维护成功较高。所以可以引入模板方法设计模式,抽象一个父类,将整个业务逻辑放到父类中,特殊处理模块交由子类进行实现,可以起到延时加载的作用。


6f5566ffe38a6dd3cf00473af1a3060.png

在上图中,抽象类中有一个业务方法入口,该方法调用了校验方法、数据特殊处理方法、数据入库方法、提交审核方法、自动核保方法;其中数据特殊处理是一个抽象方法,交由子类进行实现,其它方法都已完成业务逻辑编写。


子类继承了父类后,只需要编写数据特殊处理这个抽象方法即可,其它的业务逻辑都在父类写好了,而且流程也不需要你动。

测试用例

模板方法:

我们在这里定义一个模板类,定义了数据校验方法、数据特殊处理、数据入库、提交审核、自动审核,其中除了数据特殊处理方法为抽象方法外,其它方法都有其具体的业务实现,数据特殊处理方法留到子类,由不同的子类根据自身业务进行实现。

public abstract class BusinessTemplate {
    public String execute(String data){
        this.checker(data);
        this.previousHandle(data);
        this.proposalSave(data);
        this.submit(data);
        this.autoAudit(data);
        return "成功";
    }
    /**
     * 数据校验
     * @param data
     */
    public void checker(String data){
        System.out.println("数据校验");
    }
    /**
     * 数据特殊处理
     * @param data
     */
    public abstract void previousHandle(String data);
    /**
     * 数据入库
     * @param data
     */
    public void proposalSave(String data){
        System.out.println("数据入库");
    }
    /**
     * 提交审核
     * @param data
     */
    public void submit(String data){
        System.out.println("提交审核");
    }
    /**
     * 自动审核
     * @param data
     */
    public void autoAudit(String data){
        System.out.println("自动审核");
    }
}

子类实现

不同业务类型的子类实现不同的数据特殊处理逻辑,由于其它流程共用的,直接使用父类的方法即可。

public class AccidentBusiness extends BusinessTemplate {
    @Override
    public void previousHandle(String data) {
        System.out.println("意外险数据特殊处理");
    }
}
public class HealthBusiness extends BusinessTemplate {
    @Override
    public void previousHandle(String data) {
        System.out.println("健康险数据特殊处理");
    }
}

测试

    public static void main(String[] args) {
        AccidentBusiness accidentBusiness=new AccidentBusiness();
        accidentBusiness.execute("投保数据");
        System.out.println("-------------");
        HealthBusiness healthBusiness=new HealthBusiness();
        healthBusiness.execute("投保数据");
    }

f98353fdcac5af27fea370df3bae0a37_73e9ef1f249c4392b2e101cdde8654af.png

总结

模板方法使用于有相同逻辑流程上,一般还会配合其它的设计模式,如简单工厂模式将这些类维护起来,在抽象方法中加上责任链模式或者策略模式等等。如何使用还要根据我们的业务来定制化,需要大概预判后续可能发生的场景。



目录
相关文章
|
23天前
|
数据可视化 UED
AnimationController 类的使用场景
【10月更文挑战第18天】这些只是 `AnimationController`类的一部分使用场景,实际上它的应用范围非常广泛,可以根据具体的需求和创意来发挥其作用,为应用添加更多的活力和魅力。在使用 `AnimationController`时,需要结合其他动画组件和相关的动画逻辑来实现具体的动画效果,同时要注意合理控制动画的时长、速度和节奏,以确保动画效果的自然和流畅。
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
3月前
|
SQL Java
访问者模式问题之在上面的示例代码中,FunctionExtractor 类是怎么工作的
访问者模式问题之在上面的示例代码中,FunctionExtractor 类是怎么工作的
|
4月前
|
设计模式 算法 Java
策略模式与模版模式的区别与应用
策略模式与模版模式的区别与应用
60 4
|
6月前
|
设计模式 存储 SQL
第四篇 行为型设计模式 - 灵活定义对象间交互
第四篇 行为型设计模式 - 灵活定义对象间交互
127 0
|
设计模式 算法 测试技术
工作中策略模式用法及其使用场景?
工作中策略模式用法及其使用场景?
138 0
|
设计模式 前端开发 Java
工作中简单工厂模式用法及其使用场景?
工作中简单工厂模式用法及其使用场景?
108 0
|
Java 测试技术 容器
工作中责任链模式用法及其使用场景?
工作中责任链模式用法及其使用场景?
129 0
|
安全 Java 测试技术
工作中单例模式用法及其使用场景?
工作中单例模式用法及其使用场景?
98 0
|
开发框架 PHP
PHPfinal方法的使用场景是什么?底层原理是什么?
PHPfinal方法的使用场景是什么?底层原理是什么?
100 0