首页 > 其他分享 >泛型模板化设计使用-订单搜索接口

泛型模板化设计使用-订单搜索接口

时间:2024-04-21 14:11:20浏览次数:26  
标签:reqVO String void 接口 泛型 new com public 模板

泛型模板化设计使用-订单搜索接口

1.定义订单搜索接口

package com.example.core.mydemo.java.templateQuery;

//暂不使用该接口
//public interface SearchService<T extends BaseRequest,F extends BaseResponse>{
public interface SearchService<T,F>{

    /**
     * 订单搜索
     */
     F orderSearch(T reqVO) throws Exception;

}

2.定义抽象类

package com.example.core.mydemo.java.templateQuery;


import java.io.IOException;

/**
 * 接口和抽象实现类不能同时含有<T,F>
 * 'orderSearch(T)' in 'com.example.core.mydemo.java.templateQuery.AbstractSearchTemplate' clashes with 'orderSearch(T)' in 'com.example.core.mydemo.java.templateQuery.SearchService'; both methods have same erasure, yet neither overrides the other
 * @param <T>
 * @param <F>
 */
//public abstract class AbstractSearchTemplate<T,F> implements SearchService{

//public abstract class AbstractSearchTemplate<T extends BaseRequest,F extends BaseResponse>{  //去掉 实现 SearchService
public abstract class AbstractSearchTemplate<T,F>{  //这样定义也可以,不过 T extends BaseRequest,F extends BaseResponse 规范了类型

    public F orderSearch(T reqVO) throws Exception {
        return templateMethod(reqVO);
    }

    private F templateMethod(T reqVO) throws Exception {
        System.out.println("构建查询条件,准备参数");

        page(reqVO);
        System.out.println("构建查询条件,分页");

        filter(reqVO);
        System.out.println("构建查询条件,过滤");

        sort(reqVO);
        System.out.println("构建查询条件,排序");

        return transform(reqVO);
    }


    /**
     * 分页
     */
    protected abstract void page(T reqVO);

    /**
     * 过滤
     */
    protected abstract void filter(T reqVO);

    /**
     * 排序
     */
    protected abstract void sort(T reqVO);


    /**
     * 转换
     */
    protected abstract F transform(T reqVO) throws IOException;


}

3.定义请求基类和返回基类

package com.example.core.mydemo.java.templateQuery;

public class BaseRequest {
}

package com.example.core.mydemo.java.templateQuery;

public class BaseResponse {
}

4.第一个实现类

package com.example.core.mydemo.java.templateQuery;

public class AppRequest extends BaseRequest{
    /**
     * app订单号
     */
    private String orderNo;

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
}

package com.example.core.mydemo.java.templateQuery;

public class AppResponse extends BaseResponse{
    /**
     * 返回手机号
     */
    private String mobile;
    /**
     * 返回姓名
     */
    private String realName;

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }
}

package com.example.core.mydemo.java.templateQuery;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;

import java.io.IOException;

public class AppSearchServiceImpl extends AbstractSearchTemplate<AppRequest,AppResponse>{

    @Override
    protected void page(AppRequest reqVO) {
        System.out.println("分页:" + new Gson().toJson(reqVO));
    }

    @Override
    protected void filter(AppRequest reqVO) {
        System.out.println("过滤:" + new Gson().toJson(reqVO));
    }

    @Override
    protected void sort(AppRequest reqVO) {
        System.out.println("排序:" + new Gson().toJson(reqVO));
    }

    @Override
    protected AppResponse transform(AppRequest reqVO) throws IOException {
        System.out.println("数据转换:" + new Gson().toJson(reqVO));
        AppResponse appResponse = new AppResponse();
        appResponse.setMobile("13100000000");
        appResponse.setRealName("测试");

        //外部调用返回的json字符串,模拟将json转换到response对象
        AppResponse t = JSONObject.parseObject(new Gson().toJson(appResponse), AppResponse.class);

        return t;
    }
}

5.第二个实现类

package com.example.core.mydemo.java.templateQuery;

public class ConsoleRequest extends BaseRequest{
    /**
     * 管理后台交易来源查询
     */
    private String source;

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }
}


package com.example.core.mydemo.java.templateQuery;

public class ConsoleResponse extends BaseResponse{
    /**
     * 管理后台操作人
     */
    private String operator;
    /**
     * 订单时间
     */
    private String orderTime;

    public String getOperator() {
        return operator;
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }

    public String getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(String orderTime) {
        this.orderTime = orderTime;
    }
}

package com.example.core.mydemo.java.templateQuery;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;

import java.io.IOException;

public class ConsoleSearchServiceImpl extends AbstractSearchTemplate<ConsoleRequest,ConsoleResponse>{

    @Override
    protected void page(ConsoleRequest reqVO) {
        System.out.println("分页:" + new Gson().toJson(reqVO));
    }

    @Override
    protected void filter(ConsoleRequest reqVO) {
        System.out.println("过滤:" + new Gson().toJson(reqVO));
    }

    @Override
    protected void sort(ConsoleRequest reqVO) {
        System.out.println("排序:" + new Gson().toJson(reqVO));
    }

    @Override
    protected ConsoleResponse transform(ConsoleRequest reqVO) throws IOException {
        System.out.println("数据转换:" + new Gson().toJson(reqVO));
        ConsoleResponse consoleResponse = new ConsoleResponse();
        consoleResponse.setOperator("超级管理员");
        consoleResponse.setOrderTime("2024-04-19 16:41:00");

        //外部调用返回的json字符串,模拟将json转换到response对象
        ConsoleResponse t = JSONObject.parseObject(new Gson().toJson(consoleResponse), ConsoleResponse.class);
        return t;
    }
}

6.测试类

package com.example.core.mydemo.java.templateQuery;

import com.google.gson.Gson;

/**
 * output:
 * 构建查询条件,准备参数
 * 分页:{"orderNo":"DD123456789"}
 * 构建查询条件,分页
 * 过滤:{"orderNo":"DD123456789"}
 * 构建查询条件,过滤
 * 排序:{"orderNo":"DD123456789"}
 * 构建查询条件,排序
 * 数据转换:{"orderNo":"DD123456789"}
 * app查询返回结果:{"mobile":"13100000000","realName":"测试"}
 * 构建查询条件,准备参数
 * 分页:{"source":"3"}
 * 构建查询条件,分页
 * 过滤:{"source":"3"}
 * 构建查询条件,过滤
 * 排序:{"source":"3"}
 * 构建查询条件,排序
 * 数据转换:{"source":"3"}
 * console查询返回结果:{"operator":"超级管理员","orderTime":"2024-04-19 16:41:00"}
 */
public class TemplateQueryTest {

    public static void main(String[] args) throws Exception{
        AppSearchServiceImpl app = new AppSearchServiceImpl();
        AppRequest appRequest = new AppRequest();
        appRequest.setOrderNo("DD123456789");
        AppResponse appResponse = app.orderSearch(appRequest);
        System.out.println("app查询返回结果:" + new Gson().toJson(appResponse));

        ConsoleSearchServiceImpl console = new ConsoleSearchServiceImpl();
        ConsoleRequest consoleRequest = new ConsoleRequest();
        consoleRequest.setSource("3");
        ConsoleResponse consoleResponse = console.orderSearch(consoleRequest);
        System.out.println("console查询返回结果:" + new Gson().toJson(consoleResponse));

    }
}

 

标签:reqVO,String,void,接口,泛型,new,com,public,模板
From: https://www.cnblogs.com/oktokeep/p/18148888

相关文章

  • Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
    Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算1.定义请求和返回对象的上下文对象packagecom.example.core.mydemo.java.filter;importjava.time.LocalDateTime;publicclassOrderReqContext{/***租客会员号*/StringmemNo;......
  • 接口加密传输设计及AES加解密代码DEMO
    接口加密传输设计及AES加解密代码DEMO接口加密的方案设计:可以将请求的json字符串aes加密,通过params字段传输,接口服务端接收到参数,先解密,然后转换成对象。继续业务逻辑的处理。(另外一种方案是:针对敏感字段aes加密,服务接收端对敏感字段来解密处理)RequestVo对象:privateS......
  • 菜品分类模块删除接口+今天的图片不回显问题没有解决,明天再说。这篇随便写写吧,呕。+修
    点击删除按钮,删除菜品,也可以在左侧进行批量删除,故制定批量删除接口。删除规则如下 其中被套餐关联的菜品不能删除,因为删除这些菜品直接影响到套餐删除菜品后,关联的口味也要删除,所以这个删除蛮复杂的,并不是那种单表直接删的简单操作  请求参数和返回数据: 涉及到的表有......
  • 模板匹配
    1.模板匹配步骤模板匹配是一种基于图像的技术,用于在图像中寻找与给定模板图像相似的部分。由于模板图像的尺寸小于待匹配图像的尺寸,同时又需要比较两幅图像的每一个像素的灰度值,因此常采用在待匹配图像中选择与模板相同的尺寸的滑动窗口,通过比较滑动窗口与模板的相似程度,判......
  • 如何创建响应式HTML电子邮件模板
    在这个适合初学者的指南中,你将学习如何创建一个响应式电子邮件模板。你将跟随逐步说明以及代码片段设计一个在任何设备上都看起来很棒的电子邮件模板。这个项目非常适合渴望掌握电子邮件设计基础的新手!(本文视频讲解:java567.com)步骤1:设置基本结构要构建一个电子邮件模板,你可以......
  • 09-权限介绍和后台模板的使用
    权限介绍#1写过权限类---》控制用户,是否有权限访问我们的接口#2之前咱们直接定死,普通用户,超级用户,管理员这种身份,给不同人设置不同权限#3比如都是互联网用户:抖音acl控制 -游客用户只能查看-登陆用户可以查看和评论-粉丝超过1000用户,开直播#4公司......
  • java中的接口
    java中的接口目录java中的接口特征接口回调接口和抽象类的异同总结特征接口使用interface关键字接口中的所有方法默认都是publicabstract修饰接口中所有的成员变量都是publicstaticfinal修饰接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是接口使用......
  • 挖数据平台的空号检测接口:识别实时手机号码中的空号问题
     在当今数字化的时代,手机号码已经成为了人们生活中不可或缺的一部分。然而,随着通信技术的不断发展,以及用户需求的增长,诸如手机号码质量问题的挑战也越来越明显。为了解决这个问题,挖数据平台推出了一项空号检测接口,旨在实时识别并过滤掉手机号码中的空号。该接口以大数据分析为......
  • LCD显示器 --- 8080接口 和 RGB接口 的区别
    主要介绍LCD显示的基本原理,涉及像素、分辨率、颜色模型、RGB888等格式、Framebuffer、8080接口、RGB接口。1.LCD显示出图片的基本原理LCD作为显示器,它的显示原理和图片是一样的。图片可以看作由一个一个点(即像素pixel)组成。每行有xres个像素,有yres行,则这个图片的分辨率(resol......
  • 项目新建模板
    pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org......